Int num = new Int ();执行这一行时会发生什么

本文关键字:Int 什么 一行 num new 执行 | 更新日期: 2023-09-27 18:18:54

今天了解了一个新东西,我们可以使用new运算符创建整数,如下所示

int num = new int();

现在我想知道如果我以这种方式创建一个整数,那么得到的整数将是值类型还是引用类型?我猜它会是一个值类型。我尝试了下面的代码

int num1 = 10;
int num2 = new int();
int num3;
num1 = num2;
num2 = num3;

我得到了下面的构建错误:

使用未赋值的局部变量'num3'

我知道为什么给出这个构建错误。但我想知道何时以及如何使用new int(),以及这究竟是如何工作的?有人能解释一下吗?

谢谢,问候:)

Int num = new Int ();执行这一行时会发生什么

int i = new int();

等于

int i = 0;

他们之间没有区别。它们将生成相同的IL代码。

  // Code size       4 (0x4)
  .maxstack  1
  .locals init ([0] int32 num)
  IL_0000:  nop
  IL_0001:  ldc.i4.0
  IL_0002:  stloc.0
  IL_0003:  ret

选自Using Constructors (C# Programming Guide)

结构类型的构造函数类似于类构造函数,但是是结构不能包含显式默认构造函数,因为已经提供了由编译器自动执行。这个构造函数初始化每个字段

整数默认值为0。查看更多Default Values Table

答案在c#语言规范的4.1.2节:

所有值类型都隐式声明一个称为默认构造函数的公共无参数实例构造函数。默认构造函数返回一个零初始化实例,称为值类型的默认值:

与任何其他实例构造函数一样,值类型的默认构造函数使用new操作符调用。出于效率的考虑,此需求并不打算实际让实现生成构造函数调用。在下面的例子中,变量i和j都被初始化为0。
class A
{
    void F() {
        int i = 0;
        int j = new int();
    }
}

在不使用默认构造函数的情况下,例如

int x = 1;

这在c#语言规范4.1.4一节中有介绍:

大多数简单类型允许通过编写字面量来创建值(§2.4.4)。例如,123是int

类型的字面值。

我想你是在找

int num = default(int);

未赋值的局部变量