Мне понадобилось немного времени, чтобы понять, как будут выглядеть Update и UpdateEx. Вот пример кода, который может помочь другим.
public class BaseClass
{
// This is the Update that class instances will use, it's never overridden by a subclass
public void Update()
{
if(condition);
// etc... base class code that will always run
UpdateEx(); // ensure subclass Update() functionality is run
}
protected virtual void UpdateEx()
{
// does nothing unless sub-class overrides
}
}
У подкласса никогда не будет никакой реализации для Update (). Он будет использовать UpdateEx () для добавления реализации в Update ();
public class ConcreteClass : BaseClass
{
protected override void UpdateEx()
{
// implementation to be added to the BaseClass Update();
}
}
Любой экземпляр ConcreteClass будет использовать реализацию Update () BaseClass вместе с тем, однако ConcreteClass расширяет его функцией UpdateEx ().