如何在C#中通过接口实现事件?

13

我有一个问题:假设我有一个基于插件的系统。

我需要一种接口,可以捕获每个实现例如IReporting接口的插件发送的事件。

(IReporting) object.OnSomeEvent += <.....>

但我找不到实现这一点的方法。

1个回答

31

你应该写成 ((IReporting)obj).XXX,而不是 obj.XXX。

public interface IFoo
{
    event EventHandler Boo;
}

class Foo : IFoo
{
    public event EventHandler Boo;
    public void RaiseBoo()
    {
        if (Boo != null)
            Boo(this, EventArgs.Empty);
    }
}

...

private void TestClass_Boo(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

    ...

   object o = new Foo();
   ((IFoo)o).Boo += TestClass_Boo;
   ((Foo)o).RaiseBoo();

关于插件框架,建议查看已有的结构良好的解决方案,例如MEF


在实现中是否有一种方法可以避免在调用((Foo)o).RaiseBoo()时进行到具体类Foo的转换? - Shiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接