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

Sac*_*nth 22 c# struct value-type new-operator

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

Bol*_*ock 34

因为他们有建设者.

new操作并不意味着"这是引用类型"; 它的意思是"这种类型有一个构造函数".当你new创建一个实例时,你会调用一个构造函数.

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


Son*_*nül 15

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

来自新的运营商

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

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

例如;

int i = new int(); // i will be 0 for because its default values.
Run Code Online (Sandbox Code Playgroud)

struct类型的默认值;

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

另外来自MSDN:

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