26

在 C# 中,结构是值类型,但我可以将new它们视为引用类型。为什么是这样?

4

5 回答 5

39

因为他们有构造函数。

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

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

于 2013-03-23T17:56:02.477 回答
16

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

来自新运营商

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

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

例如;

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

结构类型的默认值;

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

也来自MSDN

当您使用 new 运算符创建结构对象时,它会被创建并调用相应的构造函数。与类不同,结构可以在不使用 new 运算符的情况下进行实例化。如果不使用 new,则这些字段将保持未分配状态,并且在所有字段都初始化之前无法使用该对象。

于 2013-03-23T17:56:31.410 回答
4

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

于 2013-03-23T17:56:32.813 回答
3

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

于 2013-03-23T17:56:27.557 回答
1

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

于 2013-03-23T17:56:30.440 回答