Интересно, при каких обстоятельствах вы бы выбрать первый или второй дизайн:проектирование виртуальных методов
Первый дизайн: метод ребенок должен назвать базовый метод
public abstract class Base
{
public virtual void Enable() { IsEnable = true; }
public virtual void Disable() { IsEnable = false; }
public bool IsEnable { get; private set; }
}
public class Child : Base
{
public override void Enable() { /* do stuffs */ base.Enable(); }
public override void Disable() { /* do stuffs */ base.Disable(); }
}
Второй проект: виртуальный метод используется, чтобы убедиться, что ребенок не забудьте назвать базу
public abstract class Base
{
public void Enable()
{
IsEnable = true;
OnEnable();
}
public void Disable()
{
IsEnable = false;
OnDisable();
}
public bool IsEnable { get; private set; }
public virtual void OnEnable() {}
public virtual void OnDisable() {}
}
public class Child : Base
{
override void OnEnable() { /* do stuffs */ }
override void OnDisable() { /* do stuffs */ }
}
Благодарности
Я думаю, вы уже сами ответили на это. Используйте второй подход, когда вы должны убедиться, что базовая функциональность выполнена. –
Во-вторых, если OnEnable/Disable имеет защиту beek, а не public. –