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
留言列表