Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我需要在类构造函数中设置初始值吗?_C# - Fatal编程技术网

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;
}
这可能会让人有点困惑。因此,我个人喜欢在支持变量中显式地设置默认值

--编辑:我知道我可能误解了你的问题——正如其他人所说,所有成员变量都给定了默认值,而局部变量则没有