1.1 思维逻辑导图
1.2 定义理解
委托可以理解为:为多个具有相同参数和返回值的方法定义一个共同的代表类型。
而某些时刻,我们需要某种类型的方法作为参数值,那么这个参数值的类型就是这种委托类型。
1.3 举例说明
delegate void MyDelegate(int id); //声明委托类型
//自定义委托类型 MyDelegate mydele1 = Print; //一般方法 MyDelegate mydele2 = delegate (int i) { Console.WriteLine(i); }; //匿名方法--委托 MyDelegate mydele3 = i => { Console.WriteLine(i); }; ///匿名方法--lambda MyDelegate mydele4 = new MyDelegate(i => { Console.WriteLine(i); }); ////相当于mydele3的标准版 //泛型委托类型--内置委托类型 //Action Action<int> myAction1 = Print; Action<int> myAction2 = delegate (int i) { Console.WriteLine(i); }; //匿名方法--委托 Action<int> myAction3 = i=> { Console.WriteLine(i); }; //匿名方法--lambda Action<int> myAction4 = new Action<int>(i => { Console.WriteLine(i); }); //相当于myAction3的标准写法 //Func Func<int, bool> myFunc1 = Print2; Func<int, bool> myFunc2 = delegate (int i) { Console.WriteLine(i); return i > 3; }; //匿名方法--委托 Func<int, bool> myFunc3 = i => { Console.WriteLine(i); return i > 3; }; //匿名方法--lambda Func<int, bool> myFunc4 = new Func<int, bool>(i => { Console.WriteLine(i); return i > 3; }); //相当于myAction3的标准写法
//Predicate Predicate<int> myPred1 = Print3; Predicate<int> myPred2= delegate (int i) { Console.WriteLine(i); return i > 3; }; //匿名方法--委托 Predicate<int> myPred3 = i => { Console.WriteLine(i); return i > 3; };//匿名方法--lambda Predicate<int> myPred4 =new Predicate<int>( i => { Console.WriteLine(i); return i > 3; });//相当于myPred4的标准写法
1.4 使用场景举例
Precdicate委托使用。 List中有好多方法使用了Predicate委托实例作为参数。具体参照List相关的方法说明。 |
//一般使用场景,List对象的FindAll使用了Predicate的委托对象作为参数。 List<int> mylist = new List<int> { 1, 2, 4, 6, 7 }; var newList=mylist.FindAll((i) => { return i > 3; }); //注解:使用Lambda表达式,相当于var newList=mylist.FindAll(new Predicate<int>((i) => { return i > 3; })); |
根据具体场景使用时再总结吧,有兴趣的再深入研究。
(Action/Func委托对象与 异步执行Task任务)
1.5 小结
(1) 建议使用内置的泛型委托类型,够用。
(2) 关于委托类型的赋值:
----简单的方法请使用Lambda表达式,(使用时,写入正确的情况下会自动转化为对应的委托类型)。
----复杂的方法,定义好方法后再赋值为委托实例。
----不要使用匿名方法了,可以淘汰。