可能重複:
Difference between events and delegates and its respective applicationsC# - 代表與活動
嗨,
我是一種新的這裏, 我想知道是什麼樣的代表之間的區別&事件用法? 我該如何選擇使用哪一個?
謝謝!
可能重複:
Difference between events and delegates and its respective applicationsC# - 代表與活動
嗨,
我是一種新的這裏, 我想知道是什麼樣的代表之間的區別&事件用法? 我該如何選擇使用哪一個?
謝謝!
從MSDN:
事件:
事件是通過一個 對象發送到信號的 動作的發生的消息
代表:
委託是一個類可以容納 參考方法
在事件處理方面,問題並不是真的是否使用這個或那個。該類定義了一個事件,該事件在發生某個操作時執行,並且該消費者分配一個匹配該事件的委託定義的方法。
我幾乎-1你沒有提及(1)在。網絡,事件*僅僅是幕後的半幻想代表,或者(2)對原始問題的回答。只是引用MSDN並不是一個好的答案。 – cHao 2010-06-21 06:56:09
答案可能不是很好,但是,我不認爲在MS上覆制MSDN也不是解決方案。對於這樣一個廣泛的問題,對原始文檔的引用可能比僅僅基於上下文引用基本代碼更有用。 – marapet 2010-06-21 07:00:36
MSDN對初學者並不總是樂於助人或友好。這就是爲什麼有一個社區願意重申其他網站提供的事實和解決方案。參考文獻和答案總是特別有用,恕我直言。 – Benny 2010-06-21 23:58:45
代表用於C#中的事件。委託是可以由事件調用的方法的簽名。一個例子是:
public delegate void MessageHandler(string message);
that uses該委託將是一個活動:
public event MessageHandler NewMessage;
到調用事件:
NewMessage("Hello events");
這將呼叫使用高於該該委派method爲:
public void Client_NewMessage(string message)
{
MyTextBox.Text += message;
}
要訂閱事件(使用實施委託本地方法):
Client cl = new Client();
cl.NewMessage += new MessageHandler(Client_NewMessage);
如果你正在寫公開事件類,還有使用事件關鍵字或不之間的細微差別。 例如下面的代碼是有效的,並允許客戶端訂閱要麼ExposedAsEvent或ExposedAsDelegate:
public delegate void ExposedEventHandler(object sender, EventArgs e);
public MyClass{
public event ExposedEventHandler ExposedAsEvent;
public ExposedEventHandler ExposedAsDelegate;
}
唯一的區別是,使用事件修飾符限制哪些客戶端可以與委託做的。在這種情況下,客戶端不能直接調用委託或將其設置爲空。
刪除事件前綴,並且委託仍然可以用於類似於事件,但它也可能被客戶「誤用」。
事件修飾符實際上只是進一步闡明您的類的客戶意圖並限制訪問(封裝)的一種方式。
(如果其他類似的線程沒有幫助,請參閱http://pobox.com/~skeet/csharp/events.html) – 2010-06-21 06:32:15