确保覆盖所有虚拟方法

时间:2013-12-17 10:27:09

标签: c# oop virtual-functions

我有一个基类,我需要确保在类专门化中覆盖所有虚拟方法。我不能使用抽象类/方法,因为我还需要在基本方法中执行一些代码。

我该怎么做?

public class BaseClass
{
  public virtual void DoStuff()
  {
    // do something
  }
}

public class DerivedClass : BaseClass
{
  public override void DoStuff()
  {
     // do derived work
     base.DoStuff();
  }
}

3 个答案:

答案 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();
  }
}