在C#中创建派生类时,是否可以使用n参数函数覆盖0参数虚函数?

Sha*_*awn 1 c# virtual inheritance overriding function

我检查了MSDN和其他几个网站,但我仍然不确定我得到了答案.如果你有一个带有虚函数Init()的Parent类,那么我可以 - 在派生类中 - 有一个覆盖函数Init(int num),或者你只需​​要为你创建的每个派生类创建一个新函数?如果我没有错,后者会导致你在Child类中有2个Init函数,对吧?这就是我的意思:

    public class Parent {
        protected int a;

        public Parent() {
            a=1;
        }

        public virtual void Init() {
        }
    }

    public class Child : Parent {

        public Child() {
        }

        //is this allowed?
        public override void Init(int multiplier) {
        }

        //or do i have to do this and have 2 Init functions?
        public void Init(int multiplier) {
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jef*_*ado 5

你实际上并没有覆盖这个方法,你只是定义了一个新的重载.

为了能够覆盖方法,必须将基本方法声明为public(或protected)virtual(或abstract)方法,并且派生类必须使用相同的精确签名.

在您的情况下,基类中不存在具有该签名的可覆盖方法,因此不允许这样做.它如果重写方法与签名存在被允许Init(int),但没有,编译器会在这里产生一个错误.