我有一个抽象类,它有一个带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);
}
}
这样可行但是基类的Add函数仍然可以在外面看到,而子类中的Add函数似乎不会覆盖它。有办法吗?
答案 0 :(得分:6)
我想用一个方法覆盖和隐藏这个方法,该方法在继承类时需要一定数量的参数而不是params。
你做不到。这会打破继承。请考虑以下代码:
BaseClass bc = new ChildClass();
bc.Add(0, 1);
有来编译 - 所以你期望它做什么?如果您期望使用3个参数的方法来替换原始的,那么可能您不希望编译 - 但编译时类型bc
只是{{1 }},而不是BaseClass
。
你可以重载 ChildClass
(你不需要BaseClass.Add
,因为它没有与基类方法相同的签名),但你不能用更严格的形式替换。