在ParentDetail类中添加一个新的构造函数?

时间:2011-06-22 08:28:39

标签: c#

这是我之前的问题的后续跟进。我接受了会员的建议,一切正常。但是现在当我想要另一个构造函数时,我遇到了一个我以前没有的问题。这就是我现在所拥有的:

   public class Parent {

    public Parent() { this._parentDetails = new List<ParentDetail>(); }
    public IList<ParentDetail> ParentDetails { get { return _parentDetails; } }
    private List<ParentDetail> _parentDetails; // = new List<ParentDetail>();

    public Parent(int count) {
      for (int i = 0; i < count; i++) {
        ParentDetails.Add(new ParentDetail{ 
            Id = i + 1 
      } );
    }

当我用“Parent(int count)”中的数字调用类时,它失败并告诉我ParentDetails的实例为null。我是否必须调用默认构造函数或者是否需要在新构造函数中手动创建ParentDetail实例?

3 个答案:

答案 0 :(得分:1)

您可以执行上述两个选项之一

我认为调用默认构造函数会好一些,因为您可能会在以后添加更多内容并自动反映,并且它会减少代码的冗余:

public Parent(int count) : this() {
  for (int i = 0; i < count; i++) {
    ParentDetails.Add(new ParentDetail{ 
        Id = i + 1 
  }

答案 1 :(得分:0)

public Parent(int count):this() {
    for (int i = 0; i < count; i++) {
        ParentDetails.Add(new ParentDetail{ 
        Id = i + 1 
    } );
}

答案 2 :(得分:-2)

public Parent(int count) : this() {
    for (int i = 0; i < count; i++) {
        ParentDetails.Add(new ParentDetail{ 
            Id = i + 1 
        } );
    }
}

调用new()调用默认构造函数。如果您想从Parent(int count)构造函数调用Parent()构造函数(例如,使用count的默认值),您可以同样调用this(1)

如果您在继承的课程中这样做,可以拨打base()

根据经验,我建议你尽可能多地放在一个可以获取所有可能参数的构造函数中,然后让其他构造函数接受更少的参数并提供默认值,然后调用它。

E.g:

public Parent() : this(5) {  }

public Parent(int count) : this() {
    this._parentDetails = new List<ParentDetail>();
    for (int i = 0; i < count; i++) {
        ParentDetails.Add(new ParentDetail{ 
            Id = i + 1 
        } );
    }
}