为什么这个子类实例化了

时间:2016-03-04 18:58:15

标签: c#

我有这段代码:

class Parent
{
    public Parent(string someArg)
    {
        Console.WriteLine("Parent");
    }

}

class Child : Parent
{
    public Child(string someArg)
    {
        Console.WriteLine("Child");
    }
}

然后我实例化:

var child = new Child("something");

给我一​​个错误。我知道它与父构造函数有关,但我不确定为什么会这样。每次我在父级中有一个非参数的构造函数时,我是否需要使用base?为什么呢?

3 个答案:

答案 0 :(得分:5)

基类也需要初始化。因此,当基类只有一个对参数有胃口的构造函数时,你必须提供它。

在这种情况下,如果要覆盖基类构造函数所做的所有事情,则可以让基类具有第二个无参数构造函数。如果你想在基类构造函数中使用逻辑,你真的别无选择,只能调用: base(string)

答案 1 :(得分:0)

在基类添加此项以解决您的问题。

public Parent() {}

或保护它仅用于子类

protected Parent() {}

答案 2 :(得分:0)

当你声明一个类时,它有一个默认的无参数构造函数。如果您定义自己的构造,则默认构造消失。在您的情况下,您定义了一个带参数的构造函数。

创建新实例时,应构建继承层次结构中的每个类。基类具有唯一的构造函数,该构造函数具有不在代码中调用的字符串参数。隐式无参数构造函数调用也不会发生。

这就是为什么你应该白:

public Child(string someArg) :base(someArg) { }

或者您可以将无参数构造函数放回代码中,不要使用base

public Parent() { }