在下面的代码中,我想通过派生/子类化来扩展类的行为,并利用基类的事件:
public class A
{
public event EventHandler SomeEvent;
public void someMethod()
{
if(SomeEvent != null) SomeEvent(this, someArgs);
}
}
public class B : A
{
public void someOtherMethod()
{
if(SomeEvent != null) SomeEvent(this, someArgs); // << why is this not possible?
//Error: The event 'SomeEvent' can only appear on the left hand side of += or -=
//(except when used from within the type 'A')
}
}
为什么不可能?
对于这种情况,常见的解决方案是什么?
最佳答案
其他人已经解释了如何解决这个问题,但没有解释为什么会出现这个问题。
当您声明一个类似公共(public)字段的事件时,编译器会创建一个公共(public)事件和一个私有(private)字段。在同一个类(或嵌套 类)中,您可以直接访问该字段,例如调用所有处理程序。在其他类中,您只能看到事件,该事件仅允许订阅和取消订阅。
关于c# - 为什么在派生类中不能像在 C# 中的基类中那样使用事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/253757/