構造實例對其初始化。var t0 = new Test1 { String1 = "http://xianfen.Net", Int1 = 0 };
var t1 = new Test1(0) { String1 = "http://xianfen.Net" };
IL內部對其初始化首先調用無參構造方法,然後調用的是屬性的set或設置公共字段來實現的。
因此使用省略構造方法的對象初始化器是必須含有無參構造方法。
對象初始化器也可以顯式調用構造方法,執行順序是構造方法優先執行。
集合初始化器(Collection Initializers)
集合初始化器可以初始化List<T>等集合。
如下示例:
public class Test1
{
public string String1 { get; set; }
public int Int1 { get; set; }
}
List<Test1> l = new List<Test1>
{
new Test1{ String1 = "http://xianfen.Net", Int1 = 0 },
new Test1{ String1 = "http://www.xianfen.Net", Int1 = 1 },
new Test1{ String1 = "http://www.bianceng.cn", Int1 = 2 }
};
IL代碼:
.locals init ([0] class [mscorlib]System.Collections.Generic.List`1<class CS30NEW.Test1> l,
[1] class [mscorlib]System.Collections.Generic.List`1<class CS30NEW.Test1> '<>g__initLocal0',
[2] class CS30NEW.Test1 '<>g__initLocal1',
[3] class CS30NEW.Test1 '<>g__initLocal2',
[4] class CS30NEW.Test1 '<>g__initLocal3')
從IL代碼可以看出,編譯器生成了局部變量,然後添加到集合中。
匿名類型(Anonymous Types)
匿名類型是最有爭議的特性,說白了就像雞肋,因為使用匿名類型有很多限制。
示例:
var t3 = new { String1 = "http://xianfen.Net", Int1 = 0 };
其類型為:
t3.GetType().ToString()結果是:<>f__AnonymousType0`2[System.String,System.Int32]
檢查IL可看到: