Код C#.
Имеем модульную архитектуру с базовой реализацией модуля(0 вариант(:
public virtual void Start()
{
Log($"{Name} Started.");
}
В основном коде приложения
foreach(var module in modules)
{
module.Start();
}
В реализации модуля
public override void Start()
{
base.Start(); // <= логично вызвать вначале базовый, не так ли?
Do(); // <= но тут может что-то пойти не так.
}
может так(1 вариант(:
foreach(var module in modules)
{
module.Start();
Log($"{module.Name} Started.");
}
или так(2 вариант(:
protected abstract void OnStart();
public void Start()
{
OnStart();
Log($"{Name} Started.");
}