• 委托 CLR学习第十五课 狼


    一、委托是方法(静态方法、实例方法)的封装,我们把一个方法传递给委托后,该

    委托就指向一个具体的方法,在委托中写参数就如同像该方法中写参数,并指向该方

    法一样。

    二、申明委托编译器会将这行委托代码生成,4个方法:一个构造器、Invoke(和源

    代码中指定的原型一样,名称不同,而且是虚方法;参数、返回值和源代码定义一致

    )、BeginInvoke、EndInovke(BeginInvoke、EndInovke用于进行异步回调)。

    三。所以的委托都有一个构造器,并且该构造器接受2个参数:一个对象引用、一个

    指向回调方法的整数。

    四。所以的委托都继承自,MulticastDelegate,而MulticastDelegate又继承自

    Delegate,Delegate又继承自object。他有3个比较重要的字段:_target(object类

    型)、_methodPtr(int32),一个内部的数字(准确说,该字段的类型为System。

    IntPtr,其主要用于表示指针或者句柄),clr用他来标识回调方法。、_prev

    (MulticastDelegate)指向另一个委托对象,该字段通常为null。

    五、比较委托是否相等用Equals,需要比较它们的_traget、 _methodPtr是否相等和

    _prev指向链表有相同的长度,如果都匹配返回true;即使是指向相同回调目标/回调

    方法的委托对象,即使它们引用的是不同的2个对象,但它们在内部却都引用着相同

    的回调目标/回调方法,所以返回true。

    六、委托Delegate类中定义了3个静态的方法来帮助我们操作委托链表,2个Combine

    的重载,一个Remove,它们都是返回值类型为Delegate静态方法。

    七、+=调用Delegate.Combine方法,-=嗲用Delegate.Remove方法。

  • 相关阅读:
    python基础学习笔记(五)
    python进阶学习笔记(一)
    python基础学习笔记(七)
    LoadRunner 技巧之 脚本设计
    python基础学习笔记(八)
    python基础学习笔记(三)
    python基础学习笔记(十一)
    性能测试知多少性能分析与调优的原理
    python基础学习笔记(十)
    python基础学习笔记(六)
  • 原文地址:https://www.cnblogs.com/gowhy/p/2015989.html
Copyright © 2020-2023  润新知