我需要在类构造函数中设置初始值吗?

时间:2011-06-22 01:08:38

标签: c#

我有以下课程:

public class Detail
    {

        public Detail()
        {
            this.File = String.Empty;
            this.State = false;
            this.Tag1 = 0
        }

        public string File { get; set; }
        public bool   State { get; set; }
        public int Tag1 { get; set; }
    }
}

我是否需要在构造函数中设置这样的初始值,或者在创建类时这些默认值。编程实践怎么样?即使不需要它们在这里设置它们会更好吗?

4 个答案:

答案 0 :(得分:5)

StateTag1分别默认为false0,但File默认为null。如果您需要string.Empty,则必须指定它。

答案 1 :(得分:0)

使用默认值初始化成员字段。因此,您不必设置值是否为默认值(0intfalsebool,参考类型为null。但是string.Empty不是string的默认值。如果null不适合你,你需要将它设置为string.Empty

字段的初始值,无论是静态字段还是实例字段,都是字段类型的默认值。

变量的默认值取决于变量的类型,并确定如下:

  • 对于value-type的变量,默认值与value-type的默认构造函数计算的值相同
  • 对于reference-type的变量,默认值为null

答案 2 :(得分:0)

不,你不需要这样做。调用类构造函数时,所有属性值都会自动设置为其默认值。有关C#中默认值的信息,请参阅this page

如果您希望将字符串设置为空而不是null,或者是否要自动初始化集合(例如List),您可能需要考虑它。你所做的当然不是不好的做法,只是没必要。

答案 3 :(得分:0)

显然,在您的示例中,您无法在属性中设置它们,因为您没有明确的支持变量。

当你在构造函数中设置默认值时,它很好,但你需要小心,总是从你可能拥有的其他人那里调用那个构造函数,例如:

public Foo () {
  this.Happy = true;
  this.BasicUnit = 92;
}

public Foo (bool happy) : this() {
   this.Happy = happy;
}

关于什么是什么可能会让人感到困惑。所以,就个人而言,我喜欢在后备变量中明确设置默认值。

- 编辑:我看到我可能误解了你的问题 - 正如其他人所说的那样,所有成员变量都是默认值,局部变量不是。