在不知道C#发件人的情况下收听事件?

时间:2018-09-08 10:27:50

标签: c# events

我目前正在研究更高级的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类,但是该类并不明显存在这一事实已经引发了一个问题,即是否有这样做的理由。这被认为是不良设计吗?如果是,为什么?

0 个答案:

没有答案