1.C#委托与C++中函数指针的关系
从功能实现角度来看,委托和函数指针是一样的。但是C#之所以没有使用函数指针 ,是因为指针是不安全的,所以C#使用了一个叫做委托的东西。委托在内部封装了函数指针,所以使用委托可以达到和函数指针一样的效果。委托的强大之处不仅仅在于此,他还是类型安全的,可验证的。
2.委托的内部构造
所有的委托都隐式继承于System.MulticastDelegate类,而这个类又派生于System.Delegate。委托没有字段,事件和属性,只有实例方法,要么是两个,要么是4个,这些方法都是又编译器自动生成的。
看如下代码:
delegate void MyDelegate();
编译器会自动生成如下的实现:
可以看到,编译器自动生成了一个一个叫做MyDelegate类,这个类继承与MulticastDelegate。这个类中含有一个.ctor实例构造函数,他有两个参数,一个接受对象的引用,一个接受方法的元数据标记。编译器还自动生成了一个叫做Invoke的方法,此外还有两个关于异步调用的方法BeginInvoke和EndInvoke。
3.委托与异步