一尘不染

C#:引发继承的事件

c#

我有一个包含以下事件的基类:

public event EventHandler Loading;
public event EventHandler Finished;

在从该基类继承的类中,我尝试引发该事件:

this.Loading(this, new EventHandler()); // All we care about is which object is loading.

我收到以下错误:

事件“ BaseClass.Loading”只能出现在+ =或-=(BaseClass’)的左侧

我假设我无法像其他继承成员一样访问这些事件?


阅读 269

收藏
2020-05-19

共1个答案

一尘不染

您要做的是:

在基类(已声明事件的位置)中,创建可用于引发事件的受保护方法:

public class MyClass
{
   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);
       }
   }
}

(请注意,您可能应该更改这些方法,以检查是否必须调用事件处理程序)。

然后,在从该基类继承的类中,您只需调用OnFinished或OnLoading方法来引发事件:

public AnotherClass : MyClass
{
    public void DoSomeStuff()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}
2020-05-19