使用C#中的params隐藏/覆盖基类方法

Gök*_*urt 0 c# polymorphism inheritance abstract-class overriding

我有一个抽象类,它有一个带params参数的方法,如下所示.我想用一个方法覆盖和隐藏这个方法,该方法在继承类时需要一定数量的参数而不是params.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作但基类的添加功能仍然可见外部,子类中的添加功能似乎不会覆盖它.有办法吗?

Jon*_*eet 6

我想用一个方法覆盖和隐藏这个方法,该方法在继承类时需要一定数量的参数而不是params.

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

BaseClass bc = new ChildClass();
bc.Add(0, 1);
Run Code Online (Sandbox Code Playgroud)

必须编译 - 所以你期望它做什么?如果您期望使用3个参数替换原始方法,那么可能您不希望编译 - 但编译时类型bc只是BaseClass,而不是ChildClass.

您可以重载 BaseClass.Add(您不需要new因为它没有与基类方法相同的签名),但您不能更严格的形式替换它.