我目前正在研究更高级的C#主题,并对事件有疑问:
如果我理解的没错,我需要知道引发事件的对象(实例)才能监听它:
class IWantToListen {
public IWantToListen(IAmSending s) {
s.OnTrigger += HandleTrigger;
}
public void HandleTrigger(object sender, EventArgs e) {
// react to event
}
}
public class IAmSending {
public event EventHandler OnTrigger;
public void TriggerEvent(EventArgs e) {
OnTrigger(this, e);
}
}
为了让我的IWantToListen
实例侦听我的IAmSending
实例的事件,我必须在某个时候传递对该特定实例的引用。
但是,如果我希望我的IWantToListen
实例监听所有IAmSending
实例的事件,并且这些实例是动态创建的,该怎么办?我将不得不手动让IWantToListen
知道它必须订阅一个新的IAmSending
实例。没有其他可能性吗?我想我正在寻找可以像这样工作的东西:
public class IWantToListen {
public IWantToListen() {
EventDistributionSystem.AddListener("OnTrigger", HandleTrigger);
}
public void HandleTrigger(object sender, EventArgs e) {
// react to event
}
}
public class IAmSending {
public void TriggerEvent(EventArgs e) {
EventDistributionSystem.Send("OnTrigger", this, e);
}
}
当然,这只是一个粗略的草图,还有改进的余地,但我想您会明白的。无论如何,我无法为我的生命找到任何可以做到这一点的东西,甚至找不到有人要它。我可能可以自己构建一个单例EventDistributionSystem
类,但是该类并不明显存在这一事实已经引发了一个问题,即是否有这样做的理由。这被认为是不良设计吗?如果是,为什么?