在我上次的面试中,我被问到如何实现一个暴露事件的类,并在订阅该事件时通知新事件订阅者。
换句话说,类会公开一个事件,以便在更新数据源时通知订阅者;许多其他课程可以在任何时间订阅该活动。当一个类订阅该事件时,必须通知它以获取存储在数据源中的最新数据版本,但不得通知其他类(它们已经是最新的)。
他们建议我覆盖addHandler方法,但是如何只通知新订阅者呢?
是否有.net的功能我不知道或者我是否需要在添加到处理程序(某种观察者模式)时在订阅者类中定义一个方法?
编辑:我想我不清楚,所以我会尝试以另一种方式解释它。 假设我有一个观察者模式。当一个新的观察者订阅主题时,它会立即通过主题更新最新的数据源值。后来,当数据源中的某些内容发生变化时,主题将像往常一样通知所有注册的观察者。我被问到如何使用.net事件答案 0 :(得分:15)
你的术语是毛茸茸的 - 你的意思是“它必须被激活”?你的意思是必须在订阅点调用一次事件处理程序吗?如果是这样,那听起来像是:
private EventHandler foo;
public event EventHandler Foo
{
add
{
if (value != null)
{
value(this, EventArgs.Empty);
}
foo += value;
}
remove
{
foo -= value;
}
}
虽然这是一个非常奇怪的设计。
如果那不是你想要的,请尽量澄清。
有关详细信息,请参阅我的article on events and delegates。