C#继承包装器代码

时间:2013-05-10 08:39:02

标签: c#

public abstract class Base {
   public void execute() {
      //'preexecute code'
      child.execute();
      //'postexecute code'
   }
}

public class Child : Base {
{
   public void execute() {
      //'Some child specific code'
   }
}

在C#中是否有任何方法可以支持上面的执行模型,您可以从基类中调用子类中的函数。 “预执行代码”和“后执行代码”很常见,每次调用“执行”时都应该运行。

2 个答案:

答案 0 :(得分:10)

我建议你从基地调用一个抽象方法(称为Template Method Pattern):

abstract class Base {
  void Foo() {
    DoSomething();
    Bar();
    DoSomethingElse();
  }

  protected abstract void Bar();
}

class Child : Base {
  protected override void Bar() {
    DoSomethingChildSpecific();
  }
}

您可以为每个孩子在BarTemplate Method Pattern中的原语操作)中实现一个非常特定的部分,Base在右边调用它上下文。因此,消费者不能搞砸执行序列Foo,不像他们能够覆盖Foo本身。

答案 1 :(得分:0)

我想你正在寻找

public abstract class Base {
   public abstract void execute();
}

public class Child : Base {
{
   public override void execute() {
      //'Some child specific code'
   }
}