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

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

Patricia Arquette
发布: 2024-12-24 11:48:15
原创
250 人浏览过

How Can I Properly Raise Inherited Events in C# Derived Classes?

在 C# 中引发从基类继承的事件

在 C# 中,从基类继承事件以促进事件是常见的做法在派生类中处理。但是,引发此类继承事件需要采用特定方法来避免编译器错误。

考虑基类定义以下事件的场景:

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

在派生类中,尝试引发Loading 事件使用:

this.Loading(this, new EventHandler());
登录后复制

导致错误:

The event 'BaseClass.Loading' can only appear on the left hand side of += or -= (BaseClass')
登录后复制

This发生错误是因为事件与其他类成员不同,不能由派生类直接调用。相反,继承的事件必须通过调用基类中定义的特定方法来引发。为此,需要执行以下步骤:

  1. 在基类中创建受保护的事件引发方法:
    在基类中定义负责的受保护方法引发事件。例如:
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);
        }
    }
}
登录后复制
  1. 在派生类中调用事件引发方法:
    在派生类中,不要直接调用事件,而是调用相应的方法基类中定义的事件引发方法。例如:
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        // Raise Loading event
        OnLoading(EventArgs.Empty);

        // Raise Finished event
        OnFinished(EventArgs.Empty);
    }
}
登录后复制

通过遵循这种方法,可以在 C# 的派生类中安全有效地引发继承事件。

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

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