如大家要轉載,請保留本人的版權:
/*
*description:asp.net自定義服務器控件內部細節系列教程
*auther:崇崇-天真的好藍
*msn:[email protected]
*dates:2007-05-20
*copyright:chongchong2008 yichang hubei china
*/
關于自定義asp.net自定義服務器控件文章和源碼示例網上已經很多了,不過有些內部些節方面,讓一些初次接觸這方面技術的朋友難以理解,對服務器控件的方方面面也很疑惑。為此,我抽出些時間把自己所理解的東西整理出來,方便大家交流學習。
一 理解事件委托,事件,引發事件以及事件優化
.net框架的事件委托和事件數據的命名約定:
事件數據類由事件名加后綴eventargs構成,如:sxlogineventargs
事件委托由事件名加后綴eventhandler構成,如:sxlogineventhandler
引發事件的方法名字是在事件前加上前綴on,onsxlogin
1。事件委托
委托其實是一個類,委托具有函數指針的粒度和接口的安全性,為什么這樣說,是因為委托就是安全類型的函數指針,用來回調方法,方法的簽名必須和委托的簽名相匹配。
下面我們看看委托的聲名:
public delegate void sxlogineventhandler(object sender,sxlogineventargs e);
上面的定義表示定義了一個sxlogineventhandler的事件委托,返回類型是void,并分別接受一個object和sxlogineventargs類型的參數。object表示事件的發送者,e表示描述事件的數據。
可以看出事件委托的聲名和類的聲名是類似的,只需增加關鍵字delegate即可。
委托間接派生于system.delegate,直接派生于system.multicastdelegate。
2。事件
事件是當有動作發生或狀態改變時,類發出的信息或通知。
下面我們看看事件的聲名:
public event sxlogineventhandler sxlogin ;可以看出事件是與一個委托相關聯的。
3。引發事件
為了在類中實現事件,需要一個事件數據類,事件委托以及一個發布事件通知的方法。我們需要把這些組合在一起,下面給一個例子:
3.1 如果類沒有任何關聯的事件數據,就直接使用eventargs類,或其它已存在的事件數據類,必須匹配。否則,需要定義一個事件數據類,這個類必須從system.eventargs中派生,如下:
public class sxlogineventargs:eventargs{...}
3.2 如果事件沒有關聯的數據,就直接使用system.eventhandler作為事件委托,否則,需要定一個事件委托,如下:
public delegate void sxlogineventhandler(object sender , sxlogineventargs e );
3.3 用event關鍵字定義事件成員,后面緊跟與此對應的事件委托,如下:
public event sxlogineventhandler sxlogin ;
3.4 在類中定義一個虛方法調用事件委托,方法的名字是在事件前加上前綴on,如下:
protected virtual void onsxlogin(sxlogineventargs e)
{
if(sxlogin != null)
{
sxlogin(this , e);
}
}
4。事件優化
如果一個類中引發了多個事件,通過為每一個事件聲名一個事件字段成員來執行時低效的,為此我們換一種方法用屬性來定義事件。
.net框架有一個system.componentmodel.eventhanlderlist類,這個類是一個優化了的委托存儲和取回的鏈表。下面來看看優化事件模式是如何實現的:
private eventhanlderlist events ;
protected eventhanlderlist events
{
get
{
if(events==null)
{
events = new eventhanlderlist();
}
return events;
}
}
protected static readonly object sxlogineventobject = new object();
我們用屬性而不是字段來定義事件,如下:
public event sxlogineventhandler sxlogin
{
add{events.addhandler(sxlogineventobject,value)};
remove{events.removehandler(sxlogineventobject,value)};
}
新聞熱點
疑難解答
圖片精選