C#委托的介绍(delegate、Action、Func、predicate)
来源:互联网 发布:申请域名后缀 编辑:程序博客网 时间:2024/06/09 23:36
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。
============================================================================================
1、delegate(常用的一种声明,匿名方法)
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。
public delegate void MyDelegate(string name);public class MyBlogBase{ private MyDelegate mydelegate;}(1) 自定义Delegate时,我们常常发现Delegate必须全局可见,才能在其他地方可见并使用,而下面Action,Func的出现改变了这一局面,这两个其实说白了就是系统定义好的Delegate。
(2) 其实匿名方法,有个优点,就是可以直接使用当前函数出现的变量,代码更简洁,但可能有些人觉得不易读
============================================================================================
2、Action(无返回值的泛型委托)
(1) Action 默示无参,无返回值的委托
(2) Action<int,string> 默示有传入参数int,string无返回值的委托
(3) Action<int,string,bool> 默示有传入参数int,string,bool无返回值的委托
(4) Action<int,int,int,int> 默示有传入4个int型参数,无返回值的委托
Action至少0个参数,至多16个参数,无返回值。
Action<T>:封装一个方法,该方法只有一个参数并且不返回值。其中T是可接收的任何类型。使用代码如下:
public static void Main(){ Action<string> messageTarget; //方法是实例化 Action<T> 委托,而不是显式定义一个新委托并将命名方法分配给该委托。 messageTarget = ShowWindowsMessage; messageTarget("Hello, World1!"); // Action<T> 委托与匿名方法一起使用 messageTarget = delegate(string s) {ShowWindowsMessage(s); }; messageTarget("Hello, World2!"); //将 lambda 表达式分配给 Action<T> 委托实例 messageTarget = s => ShowWindowsMessage(s); messageTarget("Hello, World3!");} private static void ShowWindowsMessage(string message){ MessageBox.Show(message); }
============================================================================================
(2) Func<object,string,int> 默示传入参数为object, string 返回值为int的委托
(3) Func<object,string,int> 默示传入参数为object, string 返回值为int的委托
(4) Func<T1,T2,,T3,int> 默示传入参数为T1,T2,,T3(泛型)返回值为int的委托
Func至少0个参数,至多16个参数,按照返回值泛型返回。
必须有返回值,不成void。
public static void Main(){ // 实例化 Func<T, TResult> 委托 Func<string, string> convertMethod = UppercaseString; string name = "Dakota1"; Console.WriteLine(convertMethod(name)); //将 Func<T, TResult> 委托与匿名方法一起使用 Func<string, string> convert = delegate(string s) { return UppercaseString(s);}; string name = "Dakota2"; Console.WriteLine(convert(name)); //将 lambda 表达式分配给 Func<T, TResult> 委托。 Func<string, string> convert = s => UppercaseString(s); string name = "Dakota"; Console.WriteLine(convert(name)); }private static string UppercaseString(string inputString){ return inputString.ToUpper();}
============================================================================================
(1) predicate<int> 默示传入参数为int 返回bool的委托
Predicate有且只有一个参数,返回值固定为bool
Predicate<int> myPredicate; int[] myNum = new int[8] { 12, 33, 89, 21, 15, 29, 40, 52 }; public int[] myResult; public MyBlogBase() { myPredicate = delegate(int curNum) { if (curNum % 2 == 0) return true; else return false; }; } public void StartPredicate() { myResult = Array.FindAll(myNum, myPredicate); }上例中说明了Predicate的使用,FindAll方法中,参数2即是一个Predicate,在具体的执行中,每一个数组的元素都会执行指定的方法,如果满足要求返回true,并会被存放在结果集中,不符合的则被剔除,最终返回的集合,即是结果判断后想要的集合,此方法应用场景感觉像迭代中的yield。
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- Unity学习 - C#委托的介绍(delegate、Action、Func、predicate)
- Unity学习 - C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- ClippingNode 制作标题闪亮特效
- 【linux操作命令】vim
- HDVICP2视频协处理器对H.264的支持范围及特性
- 围圈报数
- <meta name="viewport" content="width=device-width, initial-scale=1.0>
- C#委托的介绍(delegate、Action、Func、predicate)
- Query DSL for elasticsearch Query
- GearMan Java版试用 02- 简单应用之Worker编写和说明
- 第11周项目2-求最大公约数(2)
- httpclient 无信任证书使用https
- 4句代码读取Excel到DataSet(非Excel组件)
- myeclipse中启动时Tomcat出现Could not create the view: An unexpected exception was thrown错误解决方案
- Linux系统结构 详解
- MySQL对索引的使用