2009-01-21 25 views
13

我有一個問題:想象我有一個基於插件的系統。如何通過C#中的接口實現事件?

我需要某種接口,我可以從每個插件捕獲事件,它實現了例如IReporting接口。

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

但我找不到辦法做到這一點。

回答

31

代替(IReporting)obj.XXX你應該寫((IReporting)OBJ).X​​XX

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

+0

是有一種方法可以在實現中執行此操作,而不必在您的調用中將其轉換爲具體類Foo((Foo)o).RaiseBoo(); ? – Shiv 2017-09-10 22:03:51