3

Got to know a new thing today that we can create integers by using new operator as below

int num = new int();

Now I wonder if I create an integer in this manner then the resulting integer will be a value type or reference type? I guess it will be a value type. I tried the below code

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

I got the below build error:

Use of unassigned local variable 'num3'

I know why this build error is given. But I wonder when and how to use new int() and how exactly does this work? Can anyone please put some light on this?

Thanks & Regards :)

4

3 回答 3

5
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

于 2013-06-17T12:35:02.170 回答
3

答案在C# 语言规范的第4.1.2节中:

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

与任何其他实例构造函数一样,值类型的默认构造函数是使用 new 运算符调用的。出于效率原因,此要求并非旨在让实现真正生成构造函数调用。在下面的示例中,变量 i 和 j 都被初始化为零。

class A
{
    void F() {
        int i = 0;
        int j = new int();
    }
}

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

int x = 1;

C# 语言规范的第4.1.4节涵盖了这一点:

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

于 2013-06-17T12:38:00.247 回答
1

我想,你正在寻找

int num = default(int);

这在面临编译错误时也很有用,未分配的局部变量

于 2013-06-17T12:35:01.963 回答