繁体   English   中英

在.NET中,父类的构造函数是否将其子类的构造函数称为第一件事?

[英]In .NET, does a parent class' constructor call its child class' constructor first thing?

public class Parent
{
    Child child1;

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

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

您需要创建子实例; 可以按照定义对其进行初始化:

Child child1 = new Child();

或在Parent构造函数中:

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

父类的构造函数不会为其成员调用构造函数。 如果成员是引用,则将其设置为null。 您需要通过调用child1 = new Child来显式分配它

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

您需要创建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
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM