Welcome

首页 / 软件开发 / .NET编程技术 / CLR笔记:15.委托

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); }