在.NET中事件的定义方法
在.NET中的事件是通过托管进行定义的,实质上就是在程序中定义的函数指针,只是委托的安全性要比函数指针高。通常的事件定义的方法如下:
但是使用这种方法定义的事件,在使用的时候只能绑定一个方法,当OnEventRegiste()方法触发事件的时候只会调用最后一次绑定的方法,而不是所有需要执行的方法。为了解决这个问题,需要将程序进行一下改进,可以让同一个事件持有多个托管。改进后的代码如下:
public class GoodEventDeclare
{
private static readonly object EventSpecial=new object() ;
private EventHandlerList _events;
protected EventHandlerList Events
{
get
{
if (this._events == null)
{
this._events = new EventHandlerList();
}
return this._events;
}
}
![]()
public event SpecialEventHandler SpecialEvent
{
add
{
this.Events.AddHandler(EventSpecial, value);
}
remove
{
this.Events.RemoveHandler(EventSpecial, value);
}
}
protected void OnEventRegiste()
{
EventHandler handler=(EventHandler) this.Events[EventSpecial];
if(handler!=null)
{
handler(this,new EventArgs());
}
}
}
![]()
public delegate void SpecialEventHandler(object sender,EventArgs e);
1
public class BadEventDeclare
2
{
3
public event SpecialEventHandler SpecialEvent;
4
public void OnEventRegiste()
5
{
6
if(SpecialEvent!=null)
7
{
8
SpecialEvent(this,new EventArgs());
9
}
10
}
11
}
12
public delegate void SpecialEventHandler(object sender,EventArgs e);

2

3

4

5

6

7

8

9

10

11

12







































posted on 2005-06-15 19:13 Edward.Net 阅读(460) 评论(0) 收藏 举报