为什么Int32的默认构造函数是无参数的?

时间:2018-03-21 14:37:29

标签: c# constructor int internals int32

int x = 6;

它有效,但

Int32 x = new Int32(6);

没有。 为什么Int32的默认构造函数无参数? 如何将6分配给x?

编辑: 更多解释.. https://referencesource.microsoft.com/#mscorlib/system/int32.cs,225942ed7b7a3252第38行:

internal int m_value;

编译器如何为此m_value分配6? Int32的构造函数是无参数的。

2 个答案:

答案 0 :(得分:3)

  

如何将6分配给x

6,文字,已经是整数。该语言的设计方式是语法中有文字表达式,它们由编译器直接解释。

普通6是一个整数文字,并且已经对应一个值为6的Int32对象。编译器实际上不需要为文字调用构造函数,但可以直接创建对象。根据类型,可能有不同的文字用于不同的文字。例如,字符串文字"foo"也使编译器直接创建值为“foo”的字符串对象。

请注意,这对C#及其打字系统来说并不特别。因此,Int32是否为值类型实际上并不重要(String甚至不是值类型,并且仍然有文字。)

答案 1 :(得分:2)

x = 6;

编译后:

IL_0001: ldc.i4.6     
IL_0002: stloc.0      

因此,您可以看到.NET具有从文字创建整数值的指令。它是在引擎盖下完成的。

ldc.i4.6创建“6”并将其放在堆栈顶部。 (实际上是创建整数值)

stloc.0将堆栈顶部的值复制到变量x