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

如何在派生类中正确调用继承事件?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-28 10:12:11750浏览

How Do I Properly Invoke Inherited Events in Derived Classes?

继承类中的自定义事件调用

在面向对象编程中,继承允许派生类从基类继承属性和行为。但是,继承成员的某些方面可能需要特殊处理。

在这种情况下,我们有一个包含两个事件的基类:Loading 和 Finished,它们在发生特定操作时触发通知。当尝试在继承类中引发这些事件时,会遇到错误。

此错误的原因是事件不仅仅是方法;而是事件。它们是封装了订阅事件处理程序列表的委托。在继承的类中,编译器希望您访问事件委托本身,而不是直接调用它。

为了解决这个问题,我们需要在基类中创建封装事件调用的受保护方法。这些名为 OnLoading 和 OnFinished 的方法将检查是否注册了任何事件处理程序并适当地调用它们。

在继承的类中,我们可以调用这些受保护的方法来引发事件。通过这样做,我们确保事件通知正确传播到所有订阅的处理程序。下面是一个示例:

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

    protected virtual void OnLoading(EventArgs e)
    {
        Loading?.Invoke(this, e);
    }

    protected virtual void OnFinished(EventArgs e)
    {
        Finished?.Invoke(this, e);
    }
}

// Derived class
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}

通过遵循这种方法,我们可以成功地在派生类中引发继承事件,并确保订阅的事件处理程序得到适当的通知。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn