【发布时间】:2010-01-23 22:05:58
【问题描述】:
不知道在什么情况下你会选择第一种或第二种设计:
第一个设计:子方法必须调用基方法
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(); }
}
第二种设计:使用虚拟方法确保孩子不会忘记调用base
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 是否受到保护而不是公开。