派生类方法隐藏继承的成员

Mig*_*ura 0 c# inheritance

我有一个基类和两个派生类:

public abstract class BaseClass {

    public IEnumerable<Double> Inputs { get; protected set; }

    public BaseClass(IEnumerable<Double> inputs) {

        foreach (Double input in inputs)
            Compute(input);
    } 

    protected abstract Double Compute(Double input);
}

public abstract class DerivedClass1 : BaseClass {

    protected abstract Double Compute(Double input);
}

public class DerivedClass2 : DerivedClass1 {

    private override Double Compute(Double input) {

    // Compute implementation

    }
}
Run Code Online (Sandbox Code Playgroud)

我收到DerivedClass1 Compute方法错误:

“DerivedClass1.Compute(Double)”隐藏继承成员“BaseClass.Compute(Double)”。要使当前成员覆盖该实现,请添加 override 关键字。

如何解决这个问题?

Bar*_*zKP 7

您不需要再次将此方法重新声明为抽象方法,只需将其删除即可:

public abstract class DerivedClass1 : BaseClass {
}
Run Code Online (Sandbox Code Playgroud)

不过,您需要提供一个构造函数,因为BaseClass它没有默认构造函数并且需要实例化一个参数。

  • 或者,您可以在 DerivedClass1 中声明它“受保护的覆盖抽象双计算(双输入);”,但是......为什么。 (2认同)