我有一個內部接口,它定義了一些事件和樣本類,它實現的接口:爲什麼類中的內部事件不能在內部接口上實現事件?
internal interface IMyEvents
{
event EventHandler MyEvent;
}
public class MyClass : IMyEvents
{
internal event EventHandler MyEvent;
public void DoSomething()
{
if (MyEvent != null) MyEvent(this, new EventArgs());
}
}
當我嘗試編譯,我得到以下錯誤:
error CS0737: 'MyClass' does not implement interface member '.IMyEvents.MyEvent'. 'MyClass.MyEvent' cannot implement an interface member because it is not public.
這是怎麼回事?這是一個內部界面,所以我不明白爲什麼這個活動必須公開。
您調用'MyEvent'的方式不是線程安全的。你應該創建一個防禦副本,或者將你的事件初始化爲'delegate {}',這樣你就不必擔心'null'了。 – svick
@svick:我們有沒有證據表明該程序是多線程的?製作非多線程程序線程安全是浪費寶貴的時間。 –
@Eric,AFAIK,我們沒有。一般來說,我同意你的看法,但是當解決方法如此簡單時,我認爲這是值得的。特別是因爲'delegate {}'解決方案使調用代碼更簡單。 – svick