【IT168技术文档】
对比代码
c#2.0
c#3.0Employee e1; private void ee1() { e1 = new Employee(1); e1.Age = 25; e1.Name = "james"; }
与自动属性一样,初始化器的c#3.0的最大特点就是语法简化。mployee 2; private void ee2() { e2 = new Employee(2) { Age = 25, Name = "james" }; }
来看下IL代码
c#2.0
c#3.0.method private hidebysig instance void ee1() cil managed { // 代码大小 45 (0x2d) .maxstack 8 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.1 IL_0003: newobj instance void WindowsFormsApplication1.Employee::.ctor(int32) IL_0008: stfld class WindowsFormsApplication1.Employee WindowsFormsApplication1.TestInitializer::e1 IL_000d: ldarg.0 IL_000e: ldfld class WindowsFormsApplication1.Employee WindowsFormsApplication1.TestInitializer::e1 IL_0013: ldc.i4.s 25 IL_0015: callvirt instance void WindowsFormsApplication1.Employee::set_Age(int32) IL_001a: nop IL_001b: ldarg.0 IL_001c: ldfld class WindowsFormsApplication1.Employee WindowsFormsApplication1.TestInitializer::e1 IL_0021: ldstr "james" IL_0026: callvirt instance void WindowsFormsApplication1.Employee::set_Name(string) IL_002b: nop IL_002c: ret } // end of method TestInitializer::ee1
.method private hidebysig instance void ee2() cil managed { // 代码大小 37 (0x25) .maxstack 3 .locals init ([0] class WindowsFormsApplication1.Employee '<>g__initLocal0') IL_0000: nop IL_0001: ldarg.0 IL_0002: ldc.i4.2 IL_0003: newobj instance void WindowsFormsApplication1.Employee::.ctor(int32) IL_0008: stloc.0 IL_0009: ldloc.0 IL_000a: ldc.i4.s 25 IL_000c: callvirt instance void WindowsFormsApplication1.Employee::set_Age(int32) IL_0011: nop IL_0012: ldloc.0 IL_0013: ldstr "james" IL_0018: callvirt instance void WindowsFormsApplication1.Employee::set_Name(string) IL_001d: nop IL_001e: ldloc.0 IL_001f: stfld class WindowsFormsApplication1.Employee WindowsFormsApplication1.TestInitializer::e2 IL_0024: ret } // end of method TestInitializer::ee2 c#2.0中是这样来赋给age值的 IL_0008: stfld class WindowsFormsApplication1.Employee WindowsFormsApplication1.TestInitializer::e1 (将参数压入堆栈) IL_000d: ldarg.0 IL_000e: ldfld class WindowsFormsApplication1.Employee WindowsFormsApplication1.TestInitializer::e1 IL_0013: ldc.i4.s 25 c#3.0是这样的 IL_0008: stloc.0(从堆栈中弹出到局部变量) IL_0009: ldloc.0 IL_000a: ldc.i4.s 25