委托的用处:回调函数。 回调函数是一种非常有用的编程机制,.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);
}