定义

C#委托实际上是一种引用类型,它类似函数指针,使我们可以将方法当作参数来传递。

 

本质

委托使用简单,然而实际情况却很复杂,只是编译器和CLR做了大量的工作来隐藏它的复杂性。

我们看看编译器和CLR如何实现委托

创建一个委托

    public delegate void DrinkWater(int x);

通过Reflector反编译后

delegate1

 

    internal class DrinkWater : System.MulticastDelegate
    {
        //构造器
        public DrinkWater(Object object, IntPtr method);
        
        //方法的原型与源代码制定的相同
        public virtual void Invoke(Int32 value);

        //允许异步回调的方法
        public virtual IAsyncResult BeginInvoke(
            Int32 value, AsyncCallback callback, Object object);

        public virtual void EndInvoke(IAsyncResult result);
    }

 

 

例子

 

结果