對(duì)象初始化器是在C#3中添加的,目的是在使用對(duì)象時(shí)簡(jiǎn)化對(duì)象的構(gòu)造。
構(gòu)造函數(shù)運(yùn)行,給定0或多個(gè)參數(shù),用于創(chuàng)建和初始化對(duì)象。以前調(diào)用方法獲取創(chuàng)建對(duì)象的句柄。例如:
MyObject myObjectInstance = new MyObject(param1, param2);
在本例中,MyObject
將使用以下值運(yùn)行param1
和param2
..它們都用于創(chuàng)建新的MyObject
在記憶中。返回已創(chuàng)建的對(duì)象(使用這些參數(shù)進(jìn)行設(shè)置),并將其設(shè)置為myObjectInstance
.
通常,構(gòu)造函數(shù)需要所需的參數(shù)才能完全設(shè)置對(duì)象,這樣就不可能在無(wú)效的狀態(tài)下創(chuàng)建對(duì)象。
然而,通常有“額外”屬性可以設(shè)置,但不是必需的。這可以通過(guò)重載的構(gòu)造函數(shù)來(lái)處理,但是會(huì)導(dǎo)致有許多在大多數(shù)情況下不一定有用的構(gòu)造函數(shù)。
這將導(dǎo)致對(duì)象初始化器-對(duì)象初始化程序允許您在對(duì)象上設(shè)置屬性或字段。后已經(jīng)建好了,但是以前你可以用它做任何事。例如:
MyObject myObjectInstance = new MyObject(param1, param2){
MyProperty = someUsefulValue};
如果您這樣做,它的行為將與您的行為大致相同:
MyObject myObjectInstance = new MyObject(param1, param2);myObjectInstance.MyProperty = someUsefulValue;
然而,在多線程環(huán)境對(duì)象初始化器的原子性可能是有益的,因?yàn)樗乐箤?duì)象處于未完全初始化的狀態(tài)(請(qǐng)參閱這個(gè)答案(更多細(xì)節(jié))-它要么是空的,要么是初始化的,就像你想要的。
此外,對(duì)象初始化器更易于讀取(特別是在設(shè)置多個(gè)值時(shí)),因此它們給您帶來(lái)了與構(gòu)造函數(shù)上的許多重載相同的好處,而無(wú)需使該類的API復(fù)雜化。