如何通知活动订阅者

8 c# events

在我上次的面试中,我被问到如何实现一个暴露事件的类,并在订阅该事件时通知新事件订阅者.

换句话说,类会公开一个事件,以便在更新数据源时通知订阅者; 许多其他课程可以在任何时间订阅该活动.当一个类订阅该事件时,必须通知它以获取存储在数据源中的最新版本的数据,但是不能通知其他类(它们已经是最新的).

他们建议我覆盖addHandler方法,但是如何只通知新订阅者呢?

是否有.net的一个功能我不知道或者我是否需要在添加到处理程序(某种观察者模式)时在订阅者类中定义一个方法?

编辑:我想我不清楚,所以我会尝试用另一种方式来解释它.假设我有一个观察者模式.当一个新的观察者订阅主题时,它会立即通过主题更新最新的数据源值.后来,当数据源中的某些内容发生变化时,主题将像往常一样通知所有注册的观察者.我被问到如何使用.net事件进行此操作

Jon*_*eet 15

你的术语是毛茸茸的 - 你的意思是"它必须被激活"?你的意思是必须在订阅点调用一次事件处理程序吗?如果是这样,那听起来像是:

private EventHandler foo;

public event EventHandler Foo 
{
    add
    {
        if (value != null)
        {
            value(this, EventArgs.Empty);
        }
        foo += value;
    }

    remove
    {
        foo -= value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常奇怪的设计.

如果那不是你想要的,请尽量澄清.

有关更多信息,请参阅我关于事件和代理的文章.

  • @Stefano:实际上没有.这只会在新代表上提升它,它存储在value中.我也会质疑它是不是很好的设计.我真的不希望事件在提出甚至结束之前被提出.在他开始收听事件之前需要时,让客户拉出新的信息会更好. (2认同)