Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果结构是值类型,为什么我可以新建它?_C#_Struct_New Operator_Value Type - Fatal编程技术网

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

C# 如果结构是值类型,为什么我可以新建它?,c#,struct,new-operator,value-type,C#,Struct,New Operator,Value Type,在C#中,结构是值类型,但我能够new它们,就好像它们是引用类型一样。为什么会这样?因为他们有构造函数 不是说“这是一个引用类型”;它的意思是“这个类型有一个构造函数”。当您new某个东西时,您创建了一个实例,并在此过程中调用了一个构造函数 因此,所有值和引用类型都有构造函数(如果类型本身没有定义任何参数,则至少默认构造函数不带任何参数)。它在MSDN文档中说,new运算符用于调用值类型的默认构造函数。您不必使用新运算符来创建结构。如果您这样做,它将调用其构造函数,如果您不这样做,所有字段都将保

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

因为他们有构造函数

不是说“这是一个引用类型”;它的意思是“这个类型有一个构造函数”。当您
new
某个东西时,您创建了一个实例,并在此过程中调用了一个构造函数


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

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

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

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

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

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

比如,

int i = new int(); // i will be 0 for because its default values.
结构类型的默认值

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

也来自:

使用新操作符创建struct对象时,它会 创建并调用相应的构造函数。不同于阶级, 可以在不使用新运算符的情况下实例化结构。如果你这样做 如果不使用“新建”,则字段将保持未分配状态,并且对象无法 在初始化所有字段之前一直使用

您还可以“新建”一个整数。

不同之处在于,您无法通过值传递引用类。

+1对于msdn链接,传递速度同样快。可能会删除
(v=vs.71)
部分?请参见更正的部分,但无法+2..构造函数实际上只是一种方法,它在被认为是初始化对象之前获得了处理对象的特权。谢谢。对于Java,“所有值和引用类型都有构造函数”也是真的吗?@Ben:我知道Java基本类型也有构造函数。谢谢。但是为什么在
new
中不能应用于
int
@Ben:因为Java不允许它?您如何证明Java中的
int
具有构造函数?