我有一个基类,我需要确保在类专门化中覆盖所有虚拟方法。我不能使用抽象类/方法,因为我还需要在基本方法中执行一些代码。
我该怎么做?
public class BaseClass
{
public virtual void DoStuff()
{
// do something
}
}
public class DerivedClass : BaseClass
{
public override void DoStuff()
{
// do derived work
base.DoStuff();
}
}
答案 0 :(得分:11)
使用钩子,更好地称为template method pattern:
public abstract class BaseClass
{
public void Start()
{
// do something
OnStart();
// do something else
}
protected abstract void OnStart();
}
这是我最喜欢的Hollywood principle,是许多框架的基础:不要打电话给我们,我们会打电话给你!
答案 1 :(得分:2)
如果你实现这样的抽象类,它就会做你需要的。
public abstract class BaseClass
{
protected abstract void doAbstractStuff();
public void DoStuff()
{
//base class code lives here
doAbstractStuff();
//or here?
}
}
答案 2 :(得分:0)
我不确定有一种简单的方法可以做到这一点,但你可以这样做:
public class BaseClass
{
public abstract void DoStuff();
protected void DoStuffInternal()
{
// do something
}
}
public class DerivedClass : BaseClass
{
public override void DoStuff()
{
// do derived work
DoStuffInternal();
}
}