zoukankan      html  css  js  c++  java
  • C#委托

    1 double[] weights={1.0,2.0,3.0,4.0};
    2 double result=handler(weights); 

    先来看一个例子:
    某人有三子,让他们各自带一样东西出门,并带回一头猎物。
    可以理解为一种父亲对儿子的委托:
    猎物  办法(工具 某工具)
    三个人执行委托的方法各不相同
    兔子 打猎(工具 弓)
    野鸡 买(工具 钱)
    狼 诱捕(工具 陷阱)
    什么是委托?
    委托是一个类型,用来指称所有形式相同的方法(返回值类型相同而且参数也相同)。

    1 public delegate double Handler(double[] ds);
    2 public double Sum(double[] ds) {//在方法中执行操作。}
    3 public double Average(double[] ds) {//在方法中执行操作。}

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

    1 Handler handler = new Handler(Sum);

    可以像使用变量一样使用委托的实例。使用委托时,需要给委托按要求传递参数。
    使用委托,则委托所关联的方法被调用。
    例:

    double[] weights={1.0,2.0,3.0,4.0};
    double result=handler(weights); 

    一个委托可以通过+运算委托关联多个方法,叫多路广播委托(对应于单路广播委托)。
    如果此时使用委托,则所有的关联方法都被调用。
    例:

    Handler handler = new Handler(Sum);
    handler += new Handler(Average);
     
    补充:
    说白了,委托就是第三方,调用者告诉第三方要做什么,然后调用者就不用管了 这个委托(第三方)就会去调用方法去帮你实现
    委托的好处:
    1.相当于用方法作为另一方法参数(类似于C的函数指针)
    2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托
    3.当不知道方法具体实现什么时使用委托,如:事件中使用委托
  • 相关阅读:
    go调查内存泄漏
    c++ 使用模板按类型统计stl多维容器中元素的数量
    phxpaxos遇到反复拉取checkpoint但是反复失败的问题,给其它节点造成压力
    phxpaxos实现状态机CAS操作
    使用phxpaxos开发过程中遇到的坑
    std::condition_variable::wait_until segment
    c++ protected 访问限定
    c++多态
    IO多路复用的水平触发与边缘触发
    Redis 源码分析系列1-main函数相关调用分析
  • 原文地址:https://www.cnblogs.com/yplong/p/3233634.html
Copyright © 2011-2022 走看看