簡體   English   中英

代表與活動

[英]Delegates and Events

我將它們用於發布者和訂閱者模式之間的不同對象之間的“通信”。

在某些示例中,我看到有時將事件聲明為靜態,有時將其聲明為靜態:

public delegate void LogProgress(string str)
public static event LogProgress LogProgressEvent;


 if (LogProgressEvent != null)
                LogProgressEvent(tempString);

為什么和何時需要使用靜態?

靜態事件實際上非常危險,並且(幸運的是)也非常罕見。 與任何靜態方法一樣,您通常在將其應用於類型(而不是任何特定實例)時使用它。 即使這樣,您也可能會在單例實例上看到它,而不是將其視為靜態事件。

危險在於,很容易忘記取消訂閱,最終使大量物體永遠活着。 與大多數基於實例的事件形成對比-通常,實例最終將超出范圍,使委托可收集(委托實例將使目標實例保持活動狀態)。

將static應用於事件與將static應用於任何其他C#字段沒有什么不同。

靜態事件隨時可供調用者使用,即使該類的實例不存在也是如此。 我想如果您想通過靜態方法引發事件,則靜態事件將非常有用

Marc的答案中查看使用靜態事件的含義

暫無
暫無

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

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