在面向对象编程中,类从其基类继承事件是很常见的。然而,引发这些继承的事件可能会导致混乱。此问题解决了尝试在派生类中引发继承事件时遇到的错误,并提供了解决方案。
在定义如下的基类中:
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中文网其他相关文章!