我在什麼情況下你會選擇第一或第二個設計納悶:設計虛擬方法
首先設計:孩子方法必須調用基方法
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保護而不是公開的。 –