靜態事件static event

一般定義一個事件是這樣的寫法
public event EventHandler OneEvent;


但是如果這樣定義的話就需要進行null判斷了
EventHandler tempHandler=OneEvent;
if(tempHandler!=null)
{
tempHandler(sender,e);
}


於是很多人這樣定義事件:
public event EventHandler OneEventNeverNull = (o, e) => { };
這樣就不需要判斷null了。


以上是實例事件,接下來看靜態事件(static event)。
靜態事件定義如下:
public static event EventHandler OneStaticEvent;


如果想要註冊的話,必須要通過類。在.NET中,大多數是實例事件,也存在極少數的靜態事件。


靜態事件有如下特性:
1、靜態事件沒有發送的實例對象;
2、靜態事件必須取消訂閱,否則無法釋放對象,可能會造成內存泄露。
(事實上,任何事件都應該取消訂閱,有始有終,過程才完成)


對於靜態事件沒有發送的實例,可以這樣理解:
1、靜態事件不需要實例,它是代表類級別的事件。也就是可以不知道發出該事件的實例。
2、靜態事件沒有實例,或者說靜態事件無法獲得他的實例,所以使用靜態事件。


通過以上的理解,我們可以知道什麼時候可以使用靜態實例:
1、從面向對象的角度,如果一個對象只獲得事件的通知(只關心時間的發生),而不需要知道發送該事件的實例的情況下。
2、沒有實例的類。比如,靜態類,抽象類,或者說其他一些抽象的類。
在實際應用中,只有在不能獲取實例的情況下才能選擇使用靜態事件。


關於靜態類總結如下:
1、在無法獲取實例的情況下,想要獲知事件的通知,可以使用靜態事件
2、不管通知的發送者是誰,只要考慮接收事件,可以使用靜態事件
3、靜態事件一定要取消訂閱,否則會內存泄露
4、想要獲得靜態類的通知,使用靜態事件
5、想要獲取靜態方法和屬性的時候,可以使用靜態事件


注:原文地址http://www.cnblogs.com/LoveJenny/archive/2013/01/30/2882383.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章