後來我發現我是在debug模式下編譯的換到release模式下變成了這樣
Book<>g__initLocal
=newBook();
<>g__initLocal
Title=
InsideCOM
;
<>g__initLocal
ISBN=
;
被優化了上面介紹的就是對象初始化器了那什麼是集合初始化器呢?
IList<Book>books=newList<Book>();
//這裡就使用了對象初始化器
學以致用吧
books
Add(newBook{Title=
InsideCOM
ISBN=
Price=
});
books
Add(newBook{Title=
InsideC#
ISBN=
d
Price=
});
books
Add(newBook{Title=
Linq
ISBN=
d
d
Price=
});
這樣的代碼沒少寫吧實際上也許比這更復雜有了C# 我們睡覺都想笑
IList<Book>books=newList<Book>{
newBook{Title=
InsideCOM
ISBN=
Price=
}
newBook{Title=
InsideC#
ISBN=
d
Price=
}
newBook{Title=
Linq
ISBN=
d
d
Price=
}
};
還是像剛才一樣我們來欣賞一下C#編譯器為我們生成的代碼
List<Book><>g__initLocal=newList<Book>();
Book<>g__initLocal=newBook();
<>g__initLocalTitle=InsideCOM;
<>g__initLocalISBN=;
<>g__initLocalPrice=f;
<>g__initLocalAdd(<>g__initLocal);
Book<>g__initLocal=newBook();
<>g__initLocalTitle=InsideC#;
<>g__initLocalISBN=d;
<>g__initLocalPrice=f;
<>g__initLocalAdd(<>g__initLocal);
Book<>g__initLocal=newBook();
<>g__initLocalTitle=Linq;
<>g__initLocalISBN=dd;
<>g__initLocalPrice=f;
<>g__initLocalAdd(<>g__initLocal);
從上面的代碼來看編譯器自動的調用了List的無參構造方法然後實例化一個個的Book再一個個的Add進去和我們原來的做法沒有什麼不同但是這是編譯器為我們做的所以簡省了我們很多的編碼工作
對象集合初始化器就算介紹完了有人也許會說不就是個syntx sugar麼有什麼是的確實是個語法糖在編譯器發展早期編譯器科學家門一直在想方設法的優化編譯器生成的代碼這個時候編譯器做的主要是對機器優化因為那個時候機器的時間非常寶貴機器運算速度也不快今天我們有了足夠好的機器了(但並不是說我們可以不關注性能的編寫程序)而且作為編寫軟件的人來說比機器的時間寶貴得多所以今天的編譯器也在向人優化了從編程語言的發展之路來講今天的編程語言比昨天的語言更高級也更人性化了我們只要編寫更少的代碼更符合人的思維的代碼而只要關注我們值的關注的地方體力活兒就交給編譯器吧
附加
剛開始想想這對象集合初始化器也許就一雞肋沒啥用不就減少一點點代碼麼像這種簡單的初始化工作大部分代碼生成器都可以來干後來在研究匿名類型的時候突然發現如果沒有這個對象初始化器匿名類型是不是要復雜一些?或者就是難以實現?
var test = new{Key=testValue=test};如果沒有對象初始化器匿名類型該怎麼辦?
[] []
From:http://tw.wingwit.com/Article/program/net/201311/14837.html