如果结构是值类型,为什么我可以新建它?

时间:2013-03-23 17:54:16

标签: c# struct new-operator value-type

在C#中,结构是值类型,但我能够new它们就像它们是引用类型一样。这是为什么?

5 个答案:

答案 0 :(得分:33)

因为他们有构造函数。

new operator并不意味着“这是一种参考类型”;它的意思是“这种类型有一个构造函数”。当你new创建一个实例时,你会调用一个构造函数。

就此而言,所有值和引用类型都有构造函数(如果类型本身没有定义任何args,则至少是一个不带args的默认构造函数。)

答案 1 :(得分:15)

new运算符并不意味着它只能用于引用类型。它也可以与值类型一起使用。

来自new Operator

  

用于创建对象调用构造函数

由于每个值类型都隐式具有公共默认构造函数,因此所有值类型都具有默认值。您可以阅读Default Values Table

例如;

int i = new int(); // i will be 0 for because its default values.

struct type的默认值;

  

通过将所有值类型字段设置为其默认值而生成的值   值,所有引用类型字段为 null

同样来自MSDN

  

使用new运算符创建struct对象时,会获得   创建并调用适当的构造函数。与课程不同,   可以在不使用new运算符的情况下实例化结构。如果你这样做   不使用new,字段将保持未分配状态,而对象则不能   使用直到所有字段都被初始化。

答案 2 :(得分:4)

你也可以“新”整数 不同之处在于您可以按值传递引用类。

答案 3 :(得分:3)

它在MSDN文档中说herenew运算符用于调用值类型的默认构造函数。

答案 4 :(得分:1)

您不必使用new运算符来创建结构。如果你这样做会调用它的构造函数,如果不是所有字段都将保持未分配状态。