为什么在有构造函数的情况下还要初始化C#值类型中的所有字段?
例如,下面的代码将不会编译
struct AAA
{
public int A;
public string C;
public AAA(int a)
{
A = a;
}
}
AAA.C 字段必须在控制返回到调用方法之前完全限定。
但是如果我们删除构造函数,那么一切都会编译
struct AAA
{
public int A;
public string C;
}
问题是对于结构,不像类,默认情况下没有字段的初始化(为了效率)。如果您没有定义构造函数,那么您将拥有一个默认构造函数,它将所有字段初始化为 null(
default适当类型)。如果您定义自己的构造函数,则只需调用默认构造函数:如果没有这个,该字段
C将不会被初始化并且该值将是未定义的。C# 与 C++ 不同,不允许出现这种情况。