为什么struct不能有无参数构造函数? 为CLR做这件事有什么问题?为什么不允许这样做? 请解释一下,因为我不明白。
答案 0 :(得分:15)
我不能有一个显式的无参数构造函数,只有隐式的构造函数,它将所有成员初始化为默认值。
虽然CLR允许它,但C#可以 不允许结构具有默认值 无参数构造函数。原因 对于值类型,编译器就是这样 默认情况下,既不生成默认值 构造函数,它们也不生成 调用默认构造函数。所以, 即使你碰巧定义了一个 默认构造函数,它不会 打电话,这只会让你感到困惑。 为避免此类问题,C# 编译器不允许定义a 用户的默认构造函数。和 因为它不会生成默认值 构造函数,你无法初始化 定义它们时的字段,......
答案 1 :(得分:0)
可以在以下位置找到一个合理的解释: http://en.csharp-online.net/CSharp_FAQ:_Why_must_struct_constructors_have_at_least_one_argument
引用: “.NET公共语言运行时(CLR)不保证将调用无参数构造函数。如果允许结构体具有默认的无参数构造函数,则暗示将始终调用默认构造函数。但是,CLR没有这样的保证。“