如何在基类中盲目地引发事件而不从派生类中调用它

Dar*_*ght 2 .net c# abstract-class

给定以下抽象类和派生类:

public abstract class Worker{
   public bool DoingWork {get;set;}
   public abstract void DoWork();
}

public class MyWorker : Worker{

   public override void DoWork(){
    // do all the work in here..
    // currently setting the base classes DoingWork property at the start and end of work
   }
}
Run Code Online (Sandbox Code Playgroud)

是否有一种机制允许我在调用abstract实现的DoWork()方法时引发事件,而不必编写派生类来实现或调用任何其他方法.

问题的原因是我想DoWork()在调用任何实现时引发一个事件,并且完成并删除了在基类中设置任何标志的实现的需要.

Ser*_*rvy 5

如果调用者正在调用派生类的方法,则不.如果您希望基类控制正在发生的事情,您希望让消费者调用基类方法,然后简单地让派生类覆盖您想要的行为,不是通过调用调用者调用的方法重写方法protected.

public abstract class Worker
{
    public bool DoingWork { get; set; }
    private event Action WorkCompleted; 
    public void DoWork()
    {
        DoingWork = true;
        DoWorkImplementation();
        DoingWork = false;
        WorkCompleted?.Invoke();
    }
    protected abstract void DoWorkImplementation();
}

public class MyWorker : Worker
{
    protected override void DoWorkImplementation()
    {
        Console.WriteLine("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)