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

本文关键字:新建 为什么 结构体 类型 如果 | 更新日期: 2023-09-27 18:05:23

在c#中,结构体是值类型,但我可以将它们作为引用类型来new。为什么会这样?

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

因为它们有构造函数。

new运算符并不表示"这是一个引用类型";它的意思是"这个类型有一个构造函数"。当你new的东西,你创建一个实例,在这样做,你调用一个构造函数。

同样,所有值和引用类型都有构造函数(如果类型本身没有定义任何参数,则至少有一个不接受参数的默认构造函数)。

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

源自new Operator

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

由于每个值类型隐式地有一个公共默认构造函数,因此所有值类型都有默认值。

默认值表例如

,

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

struct类型的默认值;

将所有值类型字段设置为其默认值所产生的值值和所有引用类型字段为null

也来自MSDN:

使用new操作符创建struct对象时,得到创建并调用相应的构造函数。与类不同的是,可以在不使用new操作符的情况下实例化结构。如果你知道不使用new,字段将保持未分配,对象不能直到所有字段初始化为止。

你也可以"new"一个整数
不同的是你不能按值传递引用类

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

不必使用new操作符来创建结构体。如果你这样做,它将调用它的构造函数,如果你不这样做,所有字段将保持未分配