有些情況下我很喜歡靜態事件,但是我很少在其他人的代碼中看到它們,這讓我懷疑我是否錯過了一些重要的東西。我在這個網站上發現了很多關於靜態事件的討論,但是大多數討論的是我不感興趣的場景(比如靜態類),或者我不會考慮首先使用它們。C# - 非靜態類的靜態事件
我對和感興趣的是我可能有許多事情的實例和一個長壽命的「經理」對象的實例,這些實例對這些實例的某些事情做出反應。一個非常簡單的例子來說明我的意思:
public class God {
//the list of followers is really big and changes all the time,
//it seems like a waste of time to
//register/unregister events for each and every one...
readonly List<Believer> Believers = new List<Believer>();
God() {
//...so instead let's have a static event and listen to that
Believer.Prayed += this.Believer_Prayed;
}
void Believer_Prayed(Believer believer, string prayer) {
//whatever
}
}
public class Believer {
public static event Action<Believer, string> Prayed;
void Pray() {
if (Prayed != null) {
Prayed(this, "can i have stuff, please");
}
}
}
對我來說,這看起來像比有一個實例事件更清潔和更簡單的解決方案,我沒有要麼監測信徒收集的變化。在Believer類可以「看見」上帝類的情況下,我有時可能會使用NotifyGodOfPrayer()方法(這是幾個類似問題中的首選答案),但通常Believer類類是在「模型」 - 我不能或不想直接訪問上帝類的裝配。
這種方法有什麼缺點嗎?
編輯:感謝大家誰已經花時間回答。 我的例子可能是壞的,所以我想澄清我的問題:如果我用這種靜態的事件的情況下,在
- 我敢肯定會有永遠只能是一個實例
這是保證只要存在,因爲應用程序的用戶對象
- 運行
- ,我看實例的數量是巨大的
然後是日這種方法的潛在問題我不知道?
除非對這個問題的答案是肯定的,否則我並不是在尋找其他的實現方式,儘管我非常感謝所有試圖提供幫助的人。 我不是尋找最漂亮的解決方案(我不得不放棄這個獎項對我自己的版本只是爲了做空,易於閱讀和維護:)
可能的重複[在C#中靜態事件如何與非靜態事件進行比較?](http://stackoverflow.com/questions/7045595/how-do-static-events-compare-to-non-static- events-in-c) –
可能,但沒有一個答案對我的方案有用。 答案1(接受):「不發送靜態事件的實例」 - 不是這裏的情況 答案2:取消訂閱有問題 - 這裏不是這種情況 答案3:靜態方法/類 - 不感興趣 答案4:3使用靜態事件的案例 - 他們都不是我的使用案例 答案5:「靜態事件就像是完全可怕的」 - 是的,沒關係。 – wilford