首页 > 后端开发 > C++ > 如何在 C# 派生类中正确引发继承事件?

如何在 C# 派生类中正确引发继承事件?

Linda Hamilton
发布: 2024-12-25 16:03:10
原创
312 人浏览过

How to Correctly Raise Inherited Events in C# Derived Classes?

在 C 中引发继承事件

在面向对象编程中,类从其基类继承事件是很常见的。然而,引发这些继承的事件可能会导致混乱。此问题解决了尝试在派生类中引发继承事件时遇到的错误,并提供了解决方案。

问题

在定义如下的基类中:

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;
}
登录后复制

派生类尝试引发继承的事件:

public class DerivedClass : BaseClass
{
    // Error: 'BaseClass.Loading' can only appear on the left hand side of += or -=
    this.Loading(this, new EventHandler());
}
登录后复制

此错误表示无法直接使用该事件访问

解决方案

要引发继承事件,您需要在基类中定义受保护的方法来处理事件调用。这些方法允许即使派生类重写事件时也可以引发事件。

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;

    protected virtual void OnLoading(EventArgs e)
    {
        EventHandler handler = Loading;
        if (handler != null) handler(this, e);
    }

    protected virtual void OnFinished(EventArgs e)
    {
        EventHandler handler = Finished;
        if (handler != null) handler(this, e);
    }

    // Invoking the events from the derived class
    public class DerivedClass : BaseClass
    {
        public void RaiseLoadingEvent()
        {
            OnLoading(EventArgs.Empty);
        }

        public void RaiseFinishedEvent()
        {
            OnFinished(EventArgs.Empty);
        }
    }
}
登录后复制

通过在派生类中调用 OnLoading 或 OnFinished,将调用基类中订阅事件的处理程序,确保派生类中正确的事件处理。

以上是如何在 C# 派生类中正确引发继承事件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板