在.NET中事件的定义方法

在.NET中的事件是通过托管进行定义的,实质上就是在程序中定义的函数指针,只是委托的安全性要比函数指针高。通常的事件定义的方法如下:
 1public 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}

12public delegate void SpecialEventHandler(object sender,EventArgs e);
但是使用这种方法定义的事件,在使用的时候只能绑定一个方法,当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);

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

导航