zoukankan      html  css  js  c++  java
  • CLR via C# 笔记 -- 委托(17)

    1. 委托是方法的包装器,使方法能通过包装器来间接回调。在一个类型中通过委托来调用另一个类型的私有成员,只要委托对象是具有足够安全性/可访问性的代码创建,便没有问题。

    2. 协变性:方法能返回从委托的返回类型派生的一个类型。逆变性:方法获取的参数可以是委托的参数类型的基类。

    3. 委托实际上是一个类,继承自System.MulticastDelegate。构造函数、Invoke、BeginInvoke、EndInvoke、Combine、Remove。

    4. 三个重要的非公共字段

      1). _target:当委托对象包装一个静态方法时,这个字段为null。当委托对象包装一个实例方法时,这个字段引用的是回调方法要操作的对象。换言之,这个字段指出要传给实例方法的隐式参数this的值

      2). _methodPrt:一个内部的整形值,CLR用它标识要回调的方法

      3).  _invocationList:该字段通常为null。构造委托链时它引用一个委托数组

    5. 委托链。每增加一个,fbChain返回都是新的。

     6. 删除委托时如果找到匹配的委托,并且删除后只剩下一个数据项,就返回那个数据项;如果剩余多个数据项,则新建一个委托对象并复制返回;如果没有数据项,则返回null。

    7. 如果委托链中一个抛出异常或长时间阻塞,链中后续的所有对象都调用不了,考虑使用GetInvocationList() 重新实现委托链调用

    8. 尽量使用Action和Func

    9. 使用CreateDelegate和DynamicInvoke动态创建委托

    lambda: 

    1). 不包含实例成员引用,则生成静态匿名函数。不需要额外的this参数,效率比较高。

    2). 包含实例成员引用,则定义匿名辅助类。

  • 相关阅读:
    算符优先分析
    自下而上语法分析
    递归下降语法分析
    LL(1)文法的判断,递归下降分析程序
    消除左递归
    4.K均值算法--应用
    2.机器学习相关数学基础
    K均值算法
    机器学习概述
    算符优先分析
  • 原文地址:https://www.cnblogs.com/Cxiaoao/p/14839591.html
Copyright © 2011-2022 走看看