C#的委托(delegate、Action、Func、predicate)
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。
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)相关推荐
- Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)
Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...
- Delegate,Action,Func,匿名方法,匿名委托,事件
一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 [c-sharp] view plainco ...
- delegate,event, lambda,Func,Action以及Predicate
delegate 委托 可以理解为c++ 语言中的函数指针,标示了方法调用的回调函数的规范.强类型,便于编译时检查是它的最大优点,从此可以和void * 说再见了. event 事件 用以delega ...
- Func vs. Action vs. Predicate [复制]
本文翻译自:Func vs. Action vs. Predicate [duplicate] This question already has an answer here: 这个问题在这里已有答 ...
- 如何使用 C# 中的 Action, Func,Predicate
译文链接:https://www.infoworld.com/article/3057152/how-to-work-with-action-func-and-predicate-delegates- ...
- C# 中的 Action, Func, EventHandler 和 EventHandlerTEventArgs
C# 中常用内置委托 Action, Func, EventHandler 和 EventHandler<TEventArgs> 介绍 Action Delegate 封装一个没有返回值的 ...
- (转)C#中的委托(Delegate)和事件(Event)
转自:http://blog.chinaunix.net/uid-576762-id-2733751.html 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设 ...
- unity学习-委托(delegate),事件(event),Action,Func
unity学习 委托 含义 定义 使用 事件 含义 使用 在进行项目的过程中,一直存在着对代码管理不当的问题,所以需要学习一些科学的代码思维,减少后期功能的修改与迭代引发的代码冗杂和内存爆炸 可以看b ...
- lambda表达式不使用委托(delegate) 用FUNC
lLambda不使用delegate关键字,而使用 Lambda运算符 => goes to l 1.Func<int,string> getInput = (int age ...
最新文章
- linux配置文件怎么把某行后几个字符替换_vim(Linux运维)
- Hackbar PJ
- Halcon算子学习:sample_object_model_3d
- Asp.Net自学笔记...(运算符)
- 华为推出地图服务 助力开发者强化地图能力
- 认识Spring核心容器IoC/DI
- mongodb导入bson文件_分布式文档存储数据库之MongoDB备份与恢复
- es搜索引擎架构_集群日志收集架构ELK
- python怎么生成图_python 生成图表
- CCNA考试题库中英文翻译版及答案14
- 小米开发版安装magisk_小米9SE不刷recovery直接安装Magisk面具的详细教程
- 鹏保宝 v7.1.0 官方版
- 基于非结构网格的仿真——太湖之光上的巨大挑战
- Hyper-V虚拟机网络配置
- 《SpringBoot框架开发技术整合》笔记(一)
- 基于51单片机的智能雨刷设计
- 分解因数 java版
- synchonized只能回答加锁?深入解析,关于锁升级流程的各项细节
- 解密支付宝所谓黑科技神码
- python公众号监控_Python-WXPY实现微信监控报警