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()在调用任何实现时引发一个事件,并且完成并删除了在基类中设置任何标志的实现的需要.
如果调用者正在调用派生类的方法,则不.如果您希望基类控制正在发生的事情,您希望让消费者调用基类方法,然后简单地让派生类覆盖您想要的行为,而不是通过调用调用者调用的方法重写方法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)