Я хотел бы создать абстрактный класс с абстрактным методом, который может измерить, сколько времени потребуется для запуска.
public abstract class Monitor
{
protected Stopwatch Timer = Stopwatch.StartNew();
public abstract void Run();
}
public class Concrete : Monitor
{
public override void Run()
{
base.Timer.Start();
//DoSomething
base.Timer.Stop();
}
}
Однако разработчики абстрактного класса не должны вызывать методы Start / Stopнапрямую, поэтому мы можем попытаться скрыть реализацию.
public abstract class Monitor
{
private Stopwatch Timer = Stopwatch.StartNew();
public virtual void Run()
{
Timer.Start();
Timer.Stop();
}
}
Но, как вы можете видеть, это не очень хорошо работает.
Как я могу гарантировать, что все реализации базового классабудет вызывать Start / Stop и все же разрешать выполнение кода между ними?Могут ли события помочь мне здесь, если да, то как?