• 理解委托(delegate)及为什么要使用委托


    委托:是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。

    上述为官方说法,理解起来比较难,举个生活中的例子:

    某人有三子,让他们各自带一样东西出门,并带回一头猎物。
    上面一句话可以理解为父亲对儿子的委托:猎物 办法(工具 某工具)-->delegate 猎物(返回值) 带回猎物(委托名)(工具(参数类型) x)-->delegate int GetValue(int i)
    三个人执行委托的方法各不相同
    兔子 打猎(工具 弓)-public static int GetValue1(int i){ return i; }
    野鸡 买(工具 钱)-public static int GetValue2(int i){ return i*2; }
    狼 诱捕(工具 陷阱)-public static int GetValue3(int i){ return i*i; }

    如何调用委托

    用new关键字(将方法名作为参数)生成一个委托对象,建立委托与方法的关联。

    GetValue obj = new GetVlaue(Class.GetValue1);

    obj(3); --> result: 3

    GetValue obj = new GetVlaue(Class.GetValue2);

    obj(3); --> result: 6

    GetValue obj = new GetVlaue(Class.GetValue3)

    obj(3); --> result: 9

    通过委托调用不同的方法,将需要执行的方法作为委托的参数

    我们还可以实现多路广播委托,什么是多路广播委托,看例子:

    GetValue obj = new GetVlaue(Class.GetValue1);

    obj += new GetVlaue(Class.GetValue2);

    obj += new GetVlaue(Class.GetValue3);

    obj(3);

    多路广播委托即:一处调用委托,所有关联方法都会被调用。

    委托的好处

    1.相当于用方法作为另一方法参数(类似于C的函数指针)
    2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托
    3.当不知道方法具体实现什么时使用委托,如:事件中使用委托

    附:.net framework中对委托进行了封装,直接使用Func<>来代替delegate,Func<>最多有四个参数的重载。 

  • 相关阅读:
    一个中型项目:本地校园App
    我的项目:一个chrome插件的诞生记,名字叫jumper
    计算机天才Aaron Swartz 名作 《如何提高效率》——纪念真正的“hacker"!
    Linux技巧总结(个人经验版)
    C++最后课程项目总结
    从windows到Linux-ubuntu新手
    笔迹之始
    Partitioning
    Join vs merge vs lookup
    IBM InfoSphere DataStage and QualityStage
  • 原文地址:https://www.cnblogs.com/zengen/p/1949518.html
Copyright © 2020-2023  润新知