我对于event 和delegate有个疑问,既:在publisher中如果不声名event,完全用delegate(其形式符合sender和eventargs模式)可以实现事件机制么?如果可以那到底event关毽子起到的是什么作用呢?只是语法么?
public class publisher{
public delegate void EventHandler( object sender , EventArgs e ) ;
private EventHandler click;//没有event
private void Notify()
{
if (click != null)
{
click(srce,eveAg);
}
}
......
}
谢谢了!
---------------------------------------------------------------
没有event用delegate功能上完全相同。
event内部使用了一个delegate的变量,并且定义了add/remove两个函数用于添加/删除event handler,C#编译器使用+=/-=简化event的操作。这和property和Field的关系类似。
用ildasm.exe可以看到上面这些信息。
---------------------------------------------------------------
这里有一些代码的例子,让你更明白如何使用委托和事件:
http://www.cnblogs.com/yellowwee
---------------------------------------------------------------
委托和event在功能上基本相同,但是如果不用event关键字声明的话,就不能在属性窗口中看到你声明的事件,因为属性窗口显示的事件只有那些又event关键字声明的委托。