深入理解c#中的委托

来源:互联网 发布:java utf8编码转换gbk 编辑:程序博客网 时间:2024/05/17 22:50

委托的用处:回调函数。 回调函数是一种非常有用的编程机制,.net framework通过委托提供了一种回调函数机制,不同于其它平台的回调机制 ,委托提供了多得多的阿勒,委托确保回调方法是类型安全的,还允许顺序调用多个方法并支持调用静态方法和实例方法

比较:在非托管的C C++中,非成员函数的地址只是一个内存地址,这个地址不拾任何额外的信息,比如函数期望收到的参数个数,参数类型,函数的返回值类型,以及函数的调用 契约,即非托管C C++回调函数不是类型安全的,但确实是一种非常轻量级的机制, .net framework中的回调函数和非托管windows 编程序环境中的回调函数一样有用,一样普遍,但是.net framework提供了一个称为委托的类型安全的机制。

c#和clr都是允许引用类型的协变性和逆变性,协变性是指方法返回 从委托的返回类型派生的一个类型,尼变性是指方法获取的参数 可以是委托的参数 类型的蕨类,协变与逆变只针对引用类型,因为值类型与void 这所以不支持协变和逆变,是因为它们的存储结构是变化的,而引用类型的存储结构始终是一个指针。

委托的工作原理: 表面上委托看似很简单,但编译器和clr在幕后做了大量工作来隐藏复杂性,下面详细阐述之

internal delegate void Feedback(Int32 value)

看到这行后,编译器会像下面一个定义一个完整的类

 internal class Feedback:System.MulticastDelegate

 {

public Feedback(Object obj, intPtr method);

public virtual void Invoke(Int32 value);

 public virtual IAsyncResult BeginInvoke(Int32 value,AsyncCallback callback, Object obj);

 public virtual void EndInvoke(IAsyncResult result);

}

原创粉丝点击