C# 我需要在类构造函数中设置初始值吗?
我有以下课程:C# 我需要在类构造函数中设置初始值吗?,c#,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
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; }
}
}
我是否需要在构造函数中像这样设置初始值,或者在创建类时这些值只是默认值。编程练习怎么样。即使不需要,在这里设置它们看起来更好吗?
状态和Tag1
将分别默认为false
和0
,但文件
将默认为null
。如果希望string.Empty
,则必须分配它。状态
和Tag1
将分别默认为false
和0
,但文件
将默认为null
。如果希望字符串.Empty
,则必须分配它。成员字段将使用默认值初始化。因此,不需要设置值是否为默认值(0
对于int
,false
对于bool
,null
对于引用类型)。但是string.Empty
不是string
的默认值。因此,如果null不适用,则需要将其设置为string.Empty
字段的初始值(无论是静态字段还是实例字段)是字段类型的默认值
变量的默认值取决于变量的类型,并按以下方式确定:
- 对于值类型的变量,默认值与值类型的默认构造函数计算的值相同
- 对于引用类型的变量,默认值为null
成员字段使用默认值进行初始化。因此,不需要设置值是否为默认值(0
对于int
,false
对于bool
,null
对于引用类型)。但是string.Empty
不是string
的默认值。因此,如果null不适用,则需要将其设置为string.Empty
字段的初始值(无论是静态字段还是实例字段)是字段类型的默认值
变量的默认值取决于变量的类型,并按以下方式确定:
- 对于值类型的变量,默认值与值类型的默认构造函数计算的值相同
- 对于引用类型的变量,默认值为null
不,您不需要这样做。调用类构造函数时,所有属性值都会自动设置为其默认值。有关C#中默认值的信息,请参阅
如果您希望字符串为空而不是NULL,或者是否希望自动收集一个集合(例如一个列表),那么您可能需要考虑它。你所做的当然一点也不坏,只是没有必要。
不,你不需要这样做。调用类构造函数时,所有属性值都会自动设置为其默认值。有关C#中默认值的信息,请参阅
如果您希望字符串为空而不是NULL,或者是否希望自动收集一个集合(例如一个列表),那么您可能需要考虑它。您所做的当然不是不好的实践,只是没有必要。
显然,在您的示例中,您不能在属性本身中设置它们,因为您没有明确的支持变量
当您在构造函数中设置默认值时,这很好,但是您需要小心从您可能拥有的其他构造函数调用该构造函数,例如:
public Foo () {
this.Happy = true;
this.BasicUnit = 92;
}
public Foo (bool happy) : this() {
this.Happy = happy;
}
这可能会让人有点困惑。因此,我个人喜欢在支持变量中显式地设置默认值
--编辑:我知道我可能误解了您的问题-正如其他人所说,所有成员变量都给定了默认值,而局部变量没有。显然,在您的示例中,您不能在属性本身中设置它们,因为您没有显式的支持变量
当您在构造函数中设置默认值时,这很好,但是您需要小心从您可能拥有的其他构造函数调用该构造函数,例如:
public Foo () {
this.Happy = true;
this.BasicUnit = 92;
}
public Foo (bool happy) : this() {
this.Happy = happy;
}
这可能会让人有点困惑。因此,我个人喜欢在支持变量中显式地设置默认值
--编辑:我知道我可能误解了你的问题——正如其他人所说,所有成员变量都给定了默认值,而局部变量则没有