提问人:Bartosz 提问时间:11/9/2021 最后编辑:Bartosz 更新时间:11/9/2021 访问量:685
C# 10 中的结构无参数构造函数和字段初始值设定项
Struct parameterless constructor and field initializers in C# 10
问:
C# 10 使为结构声明无参数构造函数和字段初始值设定项成为可能。根据语言参考,当您声明字段初始值设定项但没有显式无参数构造函数时,会发生什么情况:
如果未显式声明无参数构造函数,则结构类型将提供无参数构造函数,其行为如下所示:
如果结构类型具有显式实例构造函数或没有字段初始值设定项,则隐式无参数构造函数将生成结构类型的默认值,而不考虑字段初始值设定项 (...) 。
如果结构类型没有显式实例构造函数,并且具有字段初始值设定项,则编译器将合成一个公共无参数构造函数,该构造函数执行指定的字段初始化 (...) 。
以下代码输出:1
struct S {
public int X = 1;
}
class Program {
static void Main() { System.Console.WriteLine(new S().X); }
}
以下代码输出:0
struct S {
public int X = 1;
public S(int x) { X = x; }
}
class Program {
static void Main() { System.Console.WriteLine(new S().X); }
}
这与上面引用的规范完全一致,但我觉得这不合逻辑,所以我的问题是:为什么?为什么隐式无参数构造函数会根据是否有其他实例构造函数而具有不同的行为?为什么它不能总是考虑字段初始值设定项,即使有其他实例构造函数?
答: 暂无答案
评论