[*]初学者讨教delegate与event的问题,谢谢大家了

我对于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关键字声明的委托。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus