c# - 为什么在派生类中不能像在 C# 中的基类中那样使用事件?

标签 c# events

在下面的代码中,我想通过派生/子类化来扩展类的行为,并利用基类的事件:

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/

相关文章:

c++ - 在 C++ 中实现事件

c# - 加载前检查文件创建者以防止篡改/损坏数据

c# - C#源代码分析工具

c# - 如何播放 WPF 声音文件资源

c# - 如何自动生成WPF Event -> IObservable的扩展方法库

javascript - "Trickle-down"自定义JavaScript事件

c# - EF Core/Sqlite 一对多关系因唯一索引约束而失败

c# - 如何还原分离实体的更改

java - MouseInputAdapter 和 MouseAdapter 有什么区别?

JavaScript:如何从事件中调用函数