定义
C#委托实际上是一种引用类型,它类似函数指针,使我们可以将方法当作参数来传递。
本质
委托使用简单,然而实际情况却很复杂,只是编译器和CLR做了大量的工作来隐藏它的复杂性。
我们看看编译器和CLR如何实现委托
创建一个委托
public delegate void DrinkWater(int x);
通过Reflector反编译后
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); }
例子
结果