为什么类中的内部事件不能在内部接口上实现事件?

Jos*_*off 3 c#

我有一个定义一些事件的内部接口和一个实现接口的示例类:

internal interface IMyEvents
{
    event EventHandler MyEvent;
}

public class MyClass : IMyEvents
{
    internal event EventHandler MyEvent;

    public void DoSomething()
    {
        if (MyEvent != null) MyEvent(this, new EventArgs());
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我收到以下错误:

error CS0737: 'MyClass' does not implement interface member '.IMyEvents.MyEvent'. 'MyClass.MyEvent' cannot implement an interface member because it is not public.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?这是一个内部界面,所以我不明白为什么事件必须公开.

Eri*_*ert 9

无论接口的可访问性如何,实现接口的成员都必须在C#中是公共的显式的.

这是一个"简化"规则; 如果你不这样做,那么你会陷入C++可访问性的泥潭,那里有公共继承,私有继承等等.我们宁愿保持简单:如果要实现接口,要么创建公共成员,要么明确说明您正在实现接口.


Joã*_*elo 5

您需要显式地实施IMyEvents.

public class MyClass : IMyEvents
{
    // ...

    event EventHandler IMyEvents.MyEvent
    {
        add { MyEvent += value; }
        remove { MyEvent -= value; }
    }
}
Run Code Online (Sandbox Code Playgroud)