问题
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 :)
回答1:
int i = new int();
is equavalent to
int i = 0;
There is no difference between them. They will generate the same IL code at all.
// 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
From Using Constructors (C# Programming Guide)
Constructors for struct types resemble class constructors, but structs cannot contain an explicit default constructor because one is provided automatically by the compiler. This constructor initializes each field in the struct to the default values.
Default value of integers is 0
. Check for more Default Values Table
回答2:
The answer is in section 4.1.2 of the C# language spec:
All value types implicitly declare a public parameterless instance constructor called the default constructor. The default constructor returns a zero-initialized instance known as the default value for the value type:
Like any other instance constructor, the default constructor of a value type is invoked using the new operator. For efficiency reasons, this requirement is not intended to actually have the implementation generate a constructor call. In the example below, variables i and j are both initialized to zero.
class A
{
void F() {
int i = 0;
int j = new int();
}
}
In terms of doing things without using a default constructor, such as
int x = 1;
That's covered by section 4.1.4 of the C# Language Spec:
Most simple types permit values to be created by writing literals (§2.4.4). For example, 123 is a literal of type int
回答3:
I think, you are looking for
int num = default(int);
This is also useful when facing compilation error, Unassigned local variable
来源:https://stackoverflow.com/questions/17147553/int-num-new-int-what-happens-when-this-line-executes