cos*_*son 14 c# initialization default-value
我是否初始化整数变量是否有任何区别:
int i = 0;
int i;
Run Code Online (Sandbox Code Playgroud)
编译器或CLR是否将此视为同一事物?IIRC,我认为他们都被视为同一件事,但我似乎无法找到这篇文章.
Mic*_*odd 14
如果变量i是实例变量,则会自动为其赋值0.如果它是方法中的局部变量,则它是未定义的,因此您需要在使用它之前为其赋值.
例如:
class Program
{
static void Main(string[] args)
{
intTest it;
it = new intTest();
Console.ReadLine();
}
class intTest
{
int i;
public intTest()
{
int i2;
Console.WriteLine("i = " + i);
Console.WriteLine("i2 = " + i2);
}
}
}
Run Code Online (Sandbox Code Playgroud)
以上将无法编译,因为i2未分配.但是,通过将0分配给i2,即
int i2 = 0;
Run Code Online (Sandbox Code Playgroud)
并编译,然后运行,将显示两者现在分配为0.
我查看了IL(使用ildasm),并确认只有int设置为0才能在构造函数中设置为0.
public class Class1
{
int setToZero = 0;
int notSet;
}
Run Code Online (Sandbox Code Playgroud)
产生:
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 15 (0xf)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldc.i4.0
IL_0002: stfld int32 ClassLibrary1.Class1::setToZero
IL_0007: ldarg.0
IL_0008: call instance void [mscorlib]System.Object::.ctor()
IL_000d: nop
IL_000e: ret
} // end of method Class1::.ctor
Run Code Online (Sandbox Code Playgroud)