2010-06-21 35 views

回答

0

MSDN

事件:

事件是通過一個 對象發送到信號的 動作的發生的消息

代表:

委託是一個類可以容納 參考方法

在事件處理方面,問題並不是真的是否使用這個或那個。該類定義了一個事件,該事件在發生某個操作時執行,並且該消費者分配一個匹配該事件的委託定義的方法。

+0

我幾乎-1你沒有提及(1)在。網絡,事件*僅僅是幕後的半幻想代表,或者(2)對原始問題的回答。只是引用MSDN並不是一個好的答案。 – cHao 2010-06-21 06:56:09

+0

答案可能不是很好,但是,我不認爲在MS上覆制MSDN也不是解決方案。對於這樣一個廣泛的問題,對原始文檔的引用可能比僅僅基於上下文引用基本代碼更有用。 – marapet 2010-06-21 07:00:36

+0

MSDN對初學者並不總是樂於助人或友好。這就是爲什麼有一個社區願意重申其他網站提供的事實和解決方案。參考文獻和答案總是特別有用,恕我直言。 – Benny 2010-06-21 23:58:45

2

代表用於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); 
9

如果你正在寫公開事件類,還有使用事件關鍵字或不之間的細微差別。 例如下面的代碼是有效的,並允許客戶端訂閱要麼ExposedAsEvent或ExposedAsDelegate:

public delegate void ExposedEventHandler(object sender, EventArgs e); 

public MyClass{ 
    public event ExposedEventHandler ExposedAsEvent; 

    public ExposedEventHandler ExposedAsDelegate; 

} 

唯一的區別是,使用事件修飾符限制哪些客戶端可以與委託做的。在這種情況下,客戶端不能直接調用委託或將其設置爲空。

刪除事件前綴,並且委託仍然可以用於類似於事件,但它也可能被客戶「誤用」。

事件修飾符實際上只是進一步闡明您的類的客戶意圖並限制訪問(封裝)的一種方式。