在.NET中,父类的构造函数是否首先调用其子类的构造函数?

时间:2010-10-10 02:00:12

标签: java .net

public class Parent
{
    Child child1;

    public Parent()
    {
        child1.Name = "abc";
    }
    ...
}

获取NullReferenceException。我认为Parent()构造函数首先调用Child()构造函数,以便稍后可以在Parent()构造函数中访问child1对象???

3 个答案:

答案 0 :(得分:4)

您需要创建一个孩子的实例;要么在定义时初始化它:

Child child1 = new Child();

或者在Parent构造函数中:

public Parent(){
    child1 = new Child();
    child1.Name = "Andrew";
}

答案 1 :(得分:2)

父类的构造函数不会为其成员调用构造函数。当成员是引用时,它只是设置为null。您需要通过调用child1 = new Child

显式分配它

答案 2 :(得分:1)

成员不是隐式构建的。它们使用默认值初始化(即null用于引用类型成员),这就是您的child1成员为空的原因。

您需要创建child1的实例:

public Parent
{
  child1 = new Child();
}

在旁注中,我认为您对继承类的构造函数调用规则感到困惑。如果您的Child类继承了您的Parent类,则将隐式调用Parent类'默认(即无参数)构造函数(如果它存在):

class Parent
{
  protected string member;
  public Parent()
  {
    member = "foo";
  }
}

class Child : Parent
{
  public Child()
  {
    // member is foo here; Parent() is implicitly called
  }
}