向ParentDetail类添加一个新的构造函数

本文关键字:一个 构造函数 ParentDetail 添加 | 更新日期: 2023-09-27 17:59:48

这是我上一个问题的后续内容。我听取了一位会员的建议,一切都很好。但现在,当我想拥有另一个构造函数时,我遇到了以前没有的问题。这是我现在拥有的:

   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的实例?

向ParentDetail类添加一个新的构造函数

您可以执行您提到的的这两个选项中的任何一个

我认为调用默认构造函数会好一点,因为你以后可能会向它添加更多的东西,它会自动反映出来,而且它减少了代码的冗余:

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

调用new()将调用默认构造函数。如果要从Parent()构造函数调用Parent(int count)构造函数(例如,使用count的默认值),则可以类似地调用this(1)

如果在继承的类中执行此操作,则可以调用base()

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

例如:

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 
        } );
    }
}