如何在C#中实现抽象事件或接口方法事件?

时间:2010-07-23 01:19:54

标签: c# events

我的基本接口IFoo声明

event EventHandler Changed

当我'实现接口'时,我得到了一些遗留的样板代码,但是如何提供一个合适的默认实现呢?

add { throw new NotImplementedException(); }
remove { throw new NotImplementedException(); }

3 个答案:

答案 0 :(得分:4)

接口如何使用事件名称前缀的接口名称声明事件?我不确定这是合法的C#。

如果没有“IFoo”就可以离开。前缀,只需在类中声明事件,让编译器为您创建默认的添加/删除操作。您应该担心的是触发事件的时间:

interface IFoo
{
    event EventHandler OnChanged;
}

class MyClass : IFoo
{
    public event EventHandler OnChanged;

    private FireOnChanged()
    {
        EventHandler handler = this.OnChanged;
        if (handler != null)
        {
            handler(this, EventArgs.Empty); // with appropriate args, of course...
        }
    }
}

...或者我误解了你从哪里继承这个事件?你的类派生自一个抽象基类,它又实现了一个接口(声明事件)?这可能是你的意思,但在问题中并不清楚。

答案 1 :(得分:2)

private EventHandler onChanged;

event EventHandler IFoo.OnChanged
{
    add
    {
        onChanged += value;
    }
    remove
    {
        onChanged -= value;
    }
}

答案 2 :(得分:0)