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

时间:2015-01-10 15:03:46

标签: c# inheritance polymorphism override abstract-class

我有一个抽象类,它有一个带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函数似乎不会覆盖它。有办法吗?

1 个答案:

答案 0 :(得分:6)

  

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

你做不到。这会打破继承。请考虑以下代码:

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

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

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