在 C# 中使用参数隐藏/重写基类方法

本文关键字:重写 基类 类方法 隐藏 参数 | 更新日期: 2023-09-27 18:36:58

我有一个抽象类,它有一个带有参数的方法,如下所示。我想用一个在继承类中接受一定数量的参数而不是参数的方法覆盖和隐藏此方法。

public abstract class BaseClass{
    public List<int> list = new List<int>();
    public void Add(params int[] numbers){
        list.AddRange(numbers);
    }
}
public class ChildClass : BaseClass{
    public override void Add(int a, int b, int c){
        base.Add(a, b, c);
    }
}

这有效,但基类的 Add 函数仍然对外部可见,并且子类中的 Add 函数似乎没有覆盖它。有办法吗?

在 C# 中使用参数隐藏/重写基类方法

我想用一个在继承类中接受一定数量的参数而不是参数的方法覆盖和隐藏此方法。

你不能。这会破坏继承。请考虑以下代码:

BaseClass bc = new ChildClass();
bc.Add(0, 1);

必须编译 - 那么你期望它做什么?如果您希望具有 3 个参数的方法替换原始方法,那么大概您不希望编译它 - 但bc的编译时类型只是BaseClass,而不是ChildClass

您可以重载BaseClass.Add(您不需要new因为它与基类方法的签名不同),但不能将其替换为限制性更强的形式。