close

1.在delegate實做事件中已經說明我扪可以用delegate做出事件機制,但是這種方法有個缺點:任何用戶端都能觸發事件。

請先看之前範例的: public TextChangedEventHandler TextChanged;

將此委派物件宣告為公開成員,是為了讓外界可以直接存取它,但複作用就是誰都可以存取它。

舉例來說:

public void SetText()

{

   publisher.Text = "Hello Melo"; //設定屬性觸發publicher事件

   publisher.TextChanged("old","new"); //用戶端直接觸發事件

}

許多情形下,我扪只希望發行者才能夠觸發事件,因此C#提供event關鍵字,只要在委派前加上event關鍵字就可以防止外界觸發事件

加上event關鍵字後,publisher.TextChanged("old","new"); //用戶端直接觸發事件,這行就無法通過編譯。

 

2.使用event注意事項

第一點:

在觸發事件之前先確認委派物件是否為空

if(this.TextChanged != null)

{

   TextChanged(oldVlue,newValue);

}

第二點:

一個類別中,可能有多個地方要觸發同一事件,所以上行一段程式碼要寫重複多次,所以可以寫一可重複呼叫之方法(用以觸發事件)

此方法通常會以On開頭,以TextChanged 來說,觸發它的方法開頭會是OnTextChanged()。 

 

Example:觸發事件印出新傳入字串

1.宣告委派與發行者類別

擷取  

 

2.訂閱者

擷取  

 

3. Client觸發事件

擷取  

 

完整程式碼:

https://drive.google.com/open?id=0B7xmgb1

TKMCTcnY1dEEzS2tXdTQ&authuser=0

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()