为什么struct不能有无参数构造函数

时间:2009-02-22 21:59:44

标签: c#

为什么struct不能有无参数构造函数? 为CLR做这件事有什么问题?为什么不允许这样做? 请解释一下,因为我不明白。

2 个答案:

答案 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没有这样的保证。“