Question

I have a base class where I need to make sure that all virtual methods are overwritten in class specializations. I cannot use an abstract class/methods since I need to execute some code in the base methods as well.

How do I do this?

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

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

Solution

Use hooks, better known as the template method pattern:

public abstract class BaseClass
{
  public void Start()
  {
    // do something
    OnStart();
    // do something else
  }
  protected abstract void OnStart();
}

This employs my all-time favorite Hollywood principle, the basis of many frameworks: don't call us, we'll call you!

OTHER TIPS

If you implement an abstract class like this it will do what you need.

public abstract class BaseClass
{

  protected abstract void doAbstractStuff();

  public void DoStuff()
  {
    //base class code lives here
    doAbstractStuff();
    //or here?
  }
}

I'm not sure there is a simple way to do this, but you could do this instead:

public class BaseClass
{
  public abstract void DoStuff();

  protected void DoStuffInternal()
  {
    // do something
  }
}

public class DerivedClass : BaseClass
{
  public override void DoStuff()
  {
     // do derived work
     DoStuffInternal();
  }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top