委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。

1.委托的声明

delegate我们常用到的一种声明

delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。

namespace ConsoleApplication1
{class Program{delegate void NumDelegate(int num);static void Main(string[] args){AClass _a = new AClass();_a.cwdelegate = _a.AddNum;_a.cwdelegate(20);NumDelegate num20delegate = new NumDelegate(Add20);Console.WriteLine("-------------------------------------------");NumDelegate adddelegate = new NumDelegate(_a.AddNum);NumDelegate subdelegate = new NumDelegate(_a.SubNum);NumDelegate num30delegate = adddelegate + subdelegate;num30delegate(30);Console.WriteLine("-------------------------------------------");num30delegate += num20delegate;num30delegate(30);Console.WriteLine("-------------------------------------------");num30delegate += adddelegate;//去掉最后一个adddelegatenum30delegate -= adddelegate;num30delegate(30);Console.ReadLine();}static void Add20(int num){Console.WriteLine(string.Format("Add20: {0}", num));}}class AClass{public int result = 100;public delegate void CWDelegate(int num);public CWDelegate cwdelegate;public void AddNum(int num){Console.WriteLine(string.Format("AddNum: {0}", num));}public void SubNum(int num){Console.WriteLine(string.Format("SubNum: {0}", num));}}
}

2. Action

Action是无返回值的泛型委托。

Action 表示无参,无返回值的委托

Action<int,string> 表示有传入参数int,string无返回值的委托

Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托

Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托

Action至少0个参数,至多16个参数,无返回值。

namespace ConsoleApplication1
{class Program{static void Main(string[] args){AClass _a = new AClass();_a.cwdelegate = _a.AddNum;_a.cwdelegate(20);Console.WriteLine("-------------------------------------------");Action<int> act1 = _a.SubNum;Action<int> act2 = _a.AddNum;Action<int> act3 = act1 + act2;act3(30);Console.WriteLine("-------------------------------------------");act3 += _a.cwdelegate;act3(30);Console.WriteLine("-------------------------------------------");act3 -= _a.cwdelegate;act3(30);Console.ReadLine();}static void Add20(int num){Console.WriteLine(string.Format("Add20: {0}", num));}}class AClass{public int result = 100;public Action<int> cwdelegate;public void AddNum(int num){Console.WriteLine(string.Format("AddNum: {0}", num));}public void SubNum(int num){Console.WriteLine(string.Format("SubNum: {0}", num));}}
}

3. Func

Func是有返回值的泛型委托

Func<int> 表示无参,返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

    class Program{static void Main(string[] args){Console.WriteLine(Test<int, int>(Fun, 100, 200));Console.ReadKey();}public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b){return func(a, b);}private static int Fun(int a, int b){return a + b;}}

4. predicate的使用

泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。

    class Program{static void Main(string[] args){int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };var first = Array.Find(array, ProductGT10);Console.WriteLine("Found: X = {0}", first);Console.ReadKey();}private static bool ProductGT10(int x){return x % 5 == 0;}}

转载于:https://www.cnblogs.com/lgxlsm/p/4765248.html

C#的委托(delegate、Action、Func、predicate)相关推荐

  1. Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)

    Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...

  2. Delegate,Action,Func,匿名方法,匿名委托,事件

    一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 [c-sharp] view plainco ...

  3. delegate,event, lambda,Func,Action以及Predicate

    delegate 委托 可以理解为c++ 语言中的函数指针,标示了方法调用的回调函数的规范.强类型,便于编译时检查是它的最大优点,从此可以和void * 说再见了. event 事件 用以delega ...

  4. Func vs. Action vs. Predicate [复制]

    本文翻译自:Func vs. Action vs. Predicate [duplicate] This question already has an answer here: 这个问题在这里已有答 ...

  5. 如何使用 C# 中的 Action, Func,Predicate

    译文链接:https://www.infoworld.com/article/3057152/how-to-work-with-action-func-and-predicate-delegates- ...

  6. C# 中的 Action, Func, EventHandler 和 EventHandlerTEventArgs

    C# 中常用内置委托 Action, Func, EventHandler 和 EventHandler<TEventArgs> 介绍 Action Delegate 封装一个没有返回值的 ...

  7. (转)C#中的委托(Delegate)和事件(Event)

    转自:http://blog.chinaunix.net/uid-576762-id-2733751.html 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设 ...

  8. unity学习-委托(delegate),事件(event),Action,Func

    unity学习 委托 含义 定义 使用 事件 含义 使用 在进行项目的过程中,一直存在着对代码管理不当的问题,所以需要学习一些科学的代码思维,减少后期功能的修改与迭代引发的代码冗杂和内存爆炸 可以看b ...

  9. lambda表达式不使用委托(delegate) 用FUNC

    lLambda不使用delegate关键字,而使用  Lambda运算符 => goes to l    1.Func<int,string> getInput = (int age ...

最新文章

  1. linux配置文件怎么把某行后几个字符替换_vim(Linux运维)
  2. Hackbar PJ
  3. Halcon算子学习:sample_object_model_3d
  4. Asp.Net自学笔记...(运算符)
  5. 华为推出地图服务 助力开发者强化地图能力
  6. 认识Spring核心容器IoC/DI
  7. mongodb导入bson文件_分布式文档存储数据库之MongoDB备份与恢复
  8. es搜索引擎架构_集群日志收集架构ELK
  9. python怎么生成图_python 生成图表
  10. CCNA考试题库中英文翻译版及答案14
  11. 小米开发版安装magisk_小米9SE不刷recovery直接安装Magisk面具的详细教程
  12. 鹏保宝 v7.1.0 官方版
  13. 基于非结构网格的仿真——太湖之光上的巨大挑战
  14. Hyper-V虚拟机网络配置
  15. 《SpringBoot框架开发技术整合》笔记(一)
  16. 基于51单片机的智能雨刷设计
  17. 分解因数 java版
  18. synchonized只能回答加锁?深入解析,关于锁升级流程的各项细节
  19. 解密支付宝所谓黑科技神码
  20. python公众号监控_Python-WXPY实现微信监控报警

热门文章

  1. Python网页抓取
  2. Robbin关于App class loader的总结(转帖)
  3. JavaScript学习(十三)—节点关系
  4. 每次发工资条,同事都要随意传看,怎么解决这个问题?
  5. 在微信上如何查看2个人之间所有的红包转账记录,请注意是所有的?
  6. 父亲购房后去世,房产证还没办,后妈和父亲没结婚,户口簿上有父亲,儿子,妹妹,那房产证应该写谁的名字?
  7. 为什么现在的人越来越容易离婚了?
  8. 想法越多越贫穷,赚钱的人,都是少想多干
  9. 为什么我们一直赚不到钱?
  10. 专业思维和战略思维的区别在哪