簡體   English   中英

在哪里使用活動和代表?

[英]Where to use events and delegates?

我在很多項目中都使用過活動和代表,但我仍然懷疑在項目中使用事件和代表的地方以及委托和事件之間的區別。任何人都可以解釋一下嗎?

Delegate是一種可以封裝方法調用的類型。 如果要將方法視為對象並將其傳遞,則應使用委托。

事件只是一種將委托作為屬性公開的方式,類之外的任何代碼都可以附加其處理程序但不能調用委托。 如果將委托公開為公共屬性,則類外部的代碼不僅可以附加其處理程序,還可以調用委托。

此外,事件還允許您添加刪除方法,這些方法在處理程序附加\\分離時調用,就像公共屬性的getter和setter一樣,允許您更好地控制進程。

當您希望其他類訂閱您的類中的事件並在發生事件時收到通知時,您應該使用事件。

public delegate void MyMessageHandlerType(string message);

public class EventTest
{
    public event MyMessageHandlerType MessageEvent
    {
        add { } // invoked when MessageEvent += SomeMethod
        remove { } // invoked when MessageEvent -= SomeMethod
    }
}

委托和事件都提供了回調機制。 事件提供的回調機制比delagate的連接性稍差,因為它可能具有任意數量的附加處理程序 ,並且代碼通常以相同的方式工作,而不管處理程序的數量(如果有的話)。 一個很好的例子可能是窗口的Resized事件; 無論是否連接任何事件處理程序,窗口大小調整都將起作用; 該事件是一種通知機制。

代表在許多方面更具聯系。 通常,您可以將一個方法與委托成員完全關聯,並且通常是預期的; 以LINQ擴展方法(例如Where )為例:除非為delegate參數提供一個方法,否則它們將無法工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM