我在什么情况下你会选择第一或第二个设计纳闷:设计虚拟方法
首先设计:孩子方法必须调用基方法
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保护而不是公开的。 –