static void mm()
{
mahui m = new mahui { name = "mahui", age=14 };
}
private class mahui
{
public string name { get; set; }
public int age{get;set;}
}
注意:这里的new Cat{}不是构造函数,用的是{}而不是(),使用的是初始化设定项
利用Ildasm.exe看到:
.method private hidebysig static void mm() cil managed
{
// Code size 31 (0x1f)
.maxstack 2
.locals init ([0] class WebApplication1.TypeDemo/mahui m,
[1] class WebApplication1.TypeDemo/mahui '<>g__initLocal0')
IL_0000: nop
IL_0001: newobj instance void WebApplication1.TypeDemo/mahui::.ctor()
IL_0006: stloc.1
IL_0007: ldloc.1
IL_0008: ldstr "mahui"
IL_000d: callvirt instance void WebApplication1.TypeDemo/mahui::set_name(string)
IL_0012: nop
IL_0013: ldloc.1
IL_0014: ldc.i4.s 14
IL_0016: callvirt instance void WebApplication1.TypeDemo/mahui::set_age(int32)
IL_001b: nop
IL_001c: ldloc.1
IL_001d: stloc.0
IL_001e: ret
} // end of method TypeDemo::mm
也就是说,这并不是语言的特性,而是编译器生成的时候,先调用构造函数实例化,而后“按序”调用属性的Set方法。