如何通知活动订阅者

时间:2011-05-27 07:34:26

标签: c# events

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

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

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

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

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

1 个答案:

答案 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