有些情况下我很喜欢静态事件,但是我很少在其他人的代码中看到它们,这让我怀疑我是否错过了一些重要的东西。我在这个网站上发现了很多关于静态事件的讨论,但是大多数讨论的是我不感兴趣的场景(比如静态类),或者我不会考虑首先使用它们。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