我有以下课程:
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; }
}
}
我是否需要在构造函数中设置这样的初始值,或者在创建类时这些默认值。编程实践怎么样?即使不需要它们在这里设置它们会更好吗?
答案 0 :(得分:5)
State
和Tag1
分别默认为false
和0
,但File
默认为null
。如果您需要string.Empty
,则必须指定它。
答案 1 :(得分:0)
使用默认值初始化成员字段。因此,您不必设置值是否为默认值(0
为int
,false
为bool
,参考类型为null
。但是string.Empty
不是string
的默认值。如果null不适合你,你需要将它设置为string.Empty
。
字段的初始值,无论是静态字段还是实例字段,都是字段类型的默认值。
变量的默认值取决于变量的类型,并确定如下:
答案 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;
}
关于什么是什么可能会让人感到困惑。所以,就个人而言,我喜欢在后备变量中明确设置默认值。
- 编辑:我看到我可能误解了你的问题 - 正如其他人所说的那样,所有成员变量都是默认值,局部变量不是。