【问题标题】:How to implement events through interface in C#?C#中如何通过接口实现事件?
【发布时间】:2009-01-21 13:36:19
【问题描述】:

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

我需要某种接口来捕获每个插件的事件,例如实现IReporting 接口。

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

但我找不到这样做的方法。

【问题讨论】:

    标签: c# interface


    【解决方案1】:

    你应该写 ((IReporting)obj).XXX 而不是 (IReporting)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 ((Foo)o).RaiseBoo(); ?
    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多