我有一个定义一些事件的内部接口和一个实现接口的示例类:
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)
这里发生了什么?这是一个内部界面,所以我不明白为什么事件必须公开.
无论接口的可访问性如何,实现接口的成员都必须在C#中是公共的或显式的.
这是一个"简化"规则; 如果你不这样做,那么你会陷入C++可访问性的泥潭,那里有公共继承,私有继承等等.我们宁愿保持简单:如果要实现接口,要么创建公共成员,要么明确说明您正在实现接口.
您需要显式地实施IMyEvents.
public class MyClass : IMyEvents
{
// ...
event EventHandler IMyEvents.MyEvent
{
add { MyEvent += value; }
remove { MyEvent -= value; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |