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