Q-->question        A-->answer        M-->mention
          The Chapter 15th  Delegate

M:委托非常类似于代表一个函数地址的非托管C/C++ typedef,它就是一系列方法的封装

M:一个委托可以调用另一个类型的私有成员,这样做不会损失安全性和可访问性

Q:何为协变及反协变?
A:协变=>一个方法能返回从委托的返回类型中派生的一个类型.
  反协变=>一个方法的参数类型可以是委托参数类型的基类
  for example=> delegate Object MyCallback(FileStream fs)
  其协变和反协变=> string SomeMethod(Stream s)
  当然此对值类型无效,因为其内存结构不同

M:委托封装的方法可以是实例方法,也可以是静态方法,封装实例方法非常有用,意味着对象可以维护一些状态,并可访问对象的实例方法成员

M:定义一个委托时,编译器将会生一个完整的类,其中有4个方法=>一个构造器,Invoke(其原型与定义的委托相同),还有BeginInvoke()和EndInvoke()民步编程模型方法

M:委托是类,其也有可见性,所有委托继承于MulticastDelegate,可以定义类的地方即可定义委托,同时定义时,其内部还有3个重要的非公共成员:
  _target         => 内部对象的引用,静态方法时为null
  _methodPrt      => 一个内部整数值,标识要回调的方法
  _invocationList => 引用委托数组,通常为空,用于多播委托
note:_methodPtr从元数据标记中获得(MethodDef和MemberDef)

posted on 2007-06-18 11:29  晓木  阅读(174)  评论(0)    收藏  举报