变量初始化差异

时间:2016-01-11 05:02:02

标签: c#

有很多方法可以初始化变量,例如string varName;等等。但var appWindow = new AppWindow();AppWindow appWindow = new AppWindow();

之间有什么不同

它们是一样的吗?

任何人都可以向我解释原因,因为我对c#是陌生的。

谢谢

2 个答案:

答案 0 :(得分:0)

两个代码都是等价的,两者的IL代码都是相同的。这是一个示例,用于演示两者的IL代码是相似的:

private static void mycompareMethod()
{
    var str1 = new String(new char[10]);
    string str2 = new String(new char[10]);
}

IL输出:

{
  .method private hidebysig static void  mycompareMethod() cil managed
  .maxstack  2
  .locals init ([0] string str1,
           [1] string str2)
  IL_0000:  nop
  IL_0001:  ldc.i4.s   9
  IL_0003:  newarr     [mscorlib]System.Char
  IL_0008:  newobj     instance void [mscorlib]System.String::.ctor(char[])
  IL_000d:  stloc.0
  IL_000e:  ldc.i4.s   9
  IL_0010:  newarr     [mscorlib]System.Char
  IL_0015:  newobj     instance void [mscorlib]System.String::.ctor(char[])
  IL_001a:  stloc.1
  IL_001b:  ret
} // end of method Program::mycompareMethod

答案 1 :(得分:0)

它是一样的,但你不能以同样的方式使用它们。 当类型明显并且立即初始化变量时使用的第一个var appWindow = new AppWindow();

AppWindow appWindow; //using var you will get compile error
if(true)
 appWindow = _GetFromAnotherMethod();
else
 appWindow = new AppWindow();