使派生类中需要基方法

本文关键字:方法 派生 | 更新日期: 2023-09-27 18:24:59

我正在构建一些类,并且我在基类中有一个方法,该方法需要包含在该方法的派生类实现中。

我该怎么做?

例如:

public class base{
  public base(){}
  public void Method(base val){
    //Logic implementation
  }
}
public class derive:base{
  public derive():base(){}
  public void Method(derive val){
    base.Method(val);
    
    //Logic implementation
  }
}

使派生类中需要基方法

由于您希望基类中有实际功能,并在派生类中增强该功能,我建议在基类中有一个可以调用的公共方法,该方法反过来调用在派生类实现的抽象方法:

public abstract class BaseClass
{
  public BaseClass(){}
  public void Method(int val)
  {
      //base class logic here
      //now call DoSomething implementation
      DoSomething(val);
      //some other base class logic here
  }
  protected abstract void DoSomething(int val);
}
public class Derived : BaseClass
{
    protected override void DoSomething(int val)
    {
       //other logic
    }
}

这种模式被称为模板方法模式或非虚拟接口(NVI)模式。

将方法设为abstract

public class base{
  public base(){}
  public abstract void Method(base val);
}

在派生类中,您需要用override 标记该方法

public override void Method(derive val){

如果要在基类中创建默认实现,可以标记方法virtual而不是abstract,但不能要求派生类实现该方法。