关于NET的委托和事件描述
委托是一个类,这个类保存了一个对象和这个对象的一个方法,所以当你调用这个委托的时候就是调用保存的对象的哪个方法,委托的意义就是这个意思,把调用委托实际是委托给了一个对象的一个方法
因为委托是一个类,所以他是定义在类级别上的,也就是和类同级别的
事件是一种类的成员,他同方法,字段,属性是一个级别的,所以它定义在类的内部,你可以很容易区分开.
和字段,属性一样,事件也有事件类型,比如一个叫Name的属性是String类型的,那么一个叫MouseMove的事件他是一个叫EventHandler的委托类型的
现在我想你应该清楚委托实际上是一个类,仅仅是定义了一个委托的样子,而事件则是保存了委托的实例,因为他是成员。
?
代理(delegate)
delegate是C#中的一种类型,他实际是一个能够持有对某个方法的引用的类。与其他的类不同,delegate类能够拥有一个签名(signature),并且他只能持有与他的签名相匹配的方法的引用。他所实现的功能与C/C++中的函数指针十分相似。他允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。但与函数指针相比,delegate有许多函数指针不具备的优点。首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。其次,与函数指针相比,delegate是面向对象的,类型安全的,可靠的受控对象,也就是说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。