zoukankan      html  css  js  c++  java
  • 委托理解

    委托在本质上是一个类,我们用delegate关键字声明的所有委托都继承自System.MulticastDelegate。后者又继承自System.Delegate类,System.Delegate类则继承自System.Object。委托既然是一个类,那么它可以被定义在任何地方,既可以定义在类的内部,也可以定义在类的外部。

    正如很多资料上所说的,委托是一种类型安全的函数回调机制,它不仅能够调用实例方法,也能调用静态方法,并且具备按顺序执行多个方法的能力。

    由于委托继承自System.MulticastDelegate类,自然也继承MulticastDelegate类的字段、属性和方法。这些成员中,最重要的当属三个非公共字段。如下所示:

    字段名称 字段类型 描叙

    _target  System.Object 该字段指明委托所调用的方法所在的实例类型。如果委托调用的为静态方法,该字段为null;如果为实例方法则为该方法所在的对象。

    _methodPtr System.InPtr 标识回调方法的指针

    _invocationList System.Object 在创建委托链时指向一个委托数组,在委托刚刚构建时通常为null

    编译器自动为委托创建了BeginInvoke,Invoke和EndInvoke三个方法。

    当我们在像用普通的方法一样调用委托时,这时实际上调用的是编译器自动生成的Invoke方法。

  • 相关阅读:
    跟我学Windows Azure 一 创建Windows Azure试用账号
    Dynamic编程
    多线程下的资源同步访问
    避免在同一机器上同时运行同一应用程序的多个实例
    依赖注入与Service Locator
    MVP演化论
    应用MVP模式对遗留代码进行重构
    对遗留代码的解依赖技术
    单元测试之测试方法
    单元测试之Mock
  • 原文地址:https://www.cnblogs.com/hongjiumu/p/2700479.html
Copyright © 2011-2022 走看看