委托

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表达式,(使用时,写入正确的情况下会自动转化为对应的委托类型)。

----复杂的方法,定义好方法后再赋值为委托实例。

----不要使用匿名方法了,可以淘汰。

posted @ 2020-08-01 11:33  hakangqi  阅读(58)  评论(0编辑  收藏  举报