CLR笔记:15.委托2011-10-26 博客园 包建强1.Delegate是类型安全的,也就是说,在编译期可以检测出错误;而与之相似的Reflection是类型不 安全的。Delegate是方法地址的指针,而且不区分static和instance方法。Delegate是定义在Class之外的,这个平级的Class中包括Delegate要使用的方法。2.Delegate允许引用类型的协变(covariance)和反协变(contra-variance)。即:
delegate object MyCallBack(FileStream fs); string SomeOtherMethod(Stream s) { }
可以将SomeOtherMethod方法绑定到MyCallBack委托上。"协变"指对于返回类型,方法可以派生于委托。"反协变"指对于参数类型,委托可以派生于方法。3.委托的方法回调一般这样写:
void CallBack(string p1, string p2, TestDele d) { if (d != null) { d(p1, p2); }}
这里我补充一句废话:使用CallBack方法是可以传入null值给TestDele参数的;CallBack方法中要判 断d值是否为空,null就不能执行方法。4.Delegate本质:一个类以下委托声明:
public delegate string TestDele(int intTest);
等价于这个类:
public class TestDele : System.MulticastDelete { public TestDele(int intTest, IntPtr method); public virtual string Invoke(int intTest); public virtual IAsyncResult BeginResult(int intTest, AsyncCallback callback, Object object); public virtual void EndInvoke(IAsyncResult result); }