zoukankan      html  css  js  c++  java
  • 委托

    今天花了一整天的时间研究,不知道为什么一看完委托,现在来回顾一下,居然一点都回忆不起来,所以我再重头看下,并且把它写成文章方便以后查看。

     

    定义:委托是一个类型(专门声明可以代表替他方法调用的变量)

    语法:[修饰符] delegate 返回类型 委托名 (参数列表);

      public delegate void AgencySaleCar();

        委托最大的特点就是可以一般化的编程,即使在方法不存在的情况下也可以使用

    if(委托变量 != null) {

    委托变量();

    }

    委托与函数指针的区别:

    委托安全、委托是较复杂的数据结构可以实现"委托链(多播委托)"

    指针,就是地址

        其实在我看来,函数指针就是地址,地址可以任意赋值给某个指针变量,所以不安全,而委托是较为复杂的数据结构实现的,委托是一个类型,所以有严格的类型规范,不能随便赋值。

    匿名方法demo

    public delegate void MyMethod(string s);//定义一个委托类型

            //匿名方法

    MyMethod myM1 = delegate(string s) { };

     

    将匿名方法再一次简化,得到Lambda表达式

    myM1 = (s) => 语句;

    // => 读作 goes to

    // 语句如果是一句话,可以省略花括号和return

    // ()中表示参数,如果不会引起冲突,可以省略类型

     

    多播委托(委托链,委托的组合)

    委托都继承自System.MulticastDelegateSystem.MulticastDelegate又继承自System.Delegate

    委托类(System.MulticastDelegate)3个重要成员:

    internal IntPtr _methodPtr;     //  继承自System.Delegate

    internal object _target;         // 继承自System.Delegate  指向当前方法的指针

    private object _invocationList;   // 来自System.MulticastDelegate

     

    实际上_invocationList 是一个数组

       匿名方法的的危害:在匿名方法中,匿名方法创建了闭包,某些对象生命周期会加长
          

         匿名表达式缺点:匿名方法的优势在于自动形成闭包,而它的缺点也是让程序员“不自觉”地创建了闭包,这会让某些对象的生命周期加长。

    .NET 3.5委托的写法(Lambda表达式):

     

         Lambda表达式的增强在于“语义”, 扩展方法的延迟特性(提高性能,“合并循环”)

         参考:老赵 http://www.cnblogs.com/JeffreyZhao/archive/2009/08/07/from-delegate-to-others-2.html

  • 相关阅读:
    TiDB架构特性
    TiDB入门
    ansible安装nginx
    linux命令之cowsay
    KeepAlived 搭建高可用的HAProxy集群
    HAProxy 实现镜像队列的负载均衡
    RabbitMQ高可用集群介绍
    docker安装phpMyAdmin
    centos7安装RabbitMQ
    Vim轻量级查看Java代码
  • 原文地址:https://www.cnblogs.com/dongqinglove/p/3546447.html
Copyright © 2011-2022 走看看