我們知道在C#中要初始化一個對象可以用構造器或者聲明公有屬性然後在new一個對象之後在對屬性賦值必須一步一步的來在C#中可以有一種很簡單的方法對對象和集合進行初始化工作
看個例子


public class Point
{

int x
y;


public int X
{ get
{ return x; } set
{ x = value; } }


public int Y
{ get
{ return y; } set
{ y = value; } }

}



var a = new Point
{ X =
Y =
};

//相當於
var a = new Point(); a
X =
; a
Y =
;


//集合初始化器


List<int> num= new List<int>
{
};

//相當於
ICollection<T>
Add(T)
即num
Add(
)
我們明顯的看到初始化工作又被簡單化了注意這裡用到的技術仍然是編譯時技術也就是編譯器會在背後替你做好多工作而不是運行時的技術
從上面我們可以看出來一個對象要想像上面的那種形式初始化必須滿足幾個條件首先必須得有公有的無參構造器否則編譯器就無法new出一個對象更別說初始化了其次在進行賦值的時候這些屬性必須是共有的這點就不必解釋了
如果想看看背後編譯器做了哪些工作我們可以用ILDasm對上面的代碼進行反匯編就可以看到背後自動生成的一些東西了
From:http://tw.wingwit.com/Article/program/net/201311/11285.html