不想看我废话直接看这个链接就行:
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/new-operator
研究这个的起因还是C#的类的字段可以赋值初始化,而在C++中是不行的(除了const static int(枚举)这种成员变量),原因是类声明时并未分配空间,而后查了一些资料才得知这是C#编译器将初始化语句自动放到了构造函数中,这就对上了,可为什么结构不行呢?为什么不对结构也进行这种优化,使得可以在写结构时对一些字段直接赋值初始化呢?
用代码实测,发现不仅不能直接对字段赋值,还不能自定义结构的默认构造函数(C++可以),自定义带参数的构造函数还必须对所有字段赋值,我去,说好比C++简单点的呢?为啥要求这么多?
其实说到底,就是这个默认构造函数一个问题了:请记住,为 struct 声明默认构造函数是错误的,因为每个值类型均隐式含有公共默认构造函数。这句话的重点就是公共这个词了,也就是说C#编译器在遇到类似这样的代码