• 委托


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

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

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

  • 相关阅读:
    myeclipse的git插件安装
    安装虚拟机和Linux系统
    Windows 10快速在指定目录打开命令行
    更新Maven的本地库
    Maven安装
    html全屏显示
    除法保留两位小数
    springmvcjson中文乱码处理
    office2016 下载直通车
    JAVA面向对象编程深入理解图
  • 原文地址:https://www.cnblogs.com/haokangqi/p/13413947.html
Copyright © 2020-2023  润新知