new關(guān)鍵字的作用:
1.它計算類型及其基類型中定義的所有字段需要的字節(jié)數(shù),并且創(chuàng)建兩個額外的對象即類型對象指針香璃,同步索引塊,這些成員也會算入對象大小舟误。
2.它從托管堆中分配指定類型要求的字節(jié)數(shù)葡秒,從而分配對象的內(nèi)存,分配的所有字節(jié)都設(shè)為零。
3.它初始化“類型對象指針”和“同步索引塊”成員眯牧。
4.調(diào)用類型的實例構(gòu)造函數(shù)蹋岩。
5.返回一個地址給引用變量
方法在線程棧上的調(diào)用和執(zhí)行。
假設(shè) 有以下兩個方法
M1()
{
string name;
M2(name);
........
}
M2(string s)
{
int a;
int b;
.......
}
當調(diào)用M1方法時学少,將M1方法的局部變量壓入棧底剪个,棧的最底部有一個返回地址,這個返回地址在M1 return的時候?qū)⒎祷匕嫒罚鞰1方法的執(zhí)行結(jié)束扣囊,隨后來到M2方法這時候會將參數(shù)string s壓入棧,這時候棧又會有一個返回地址绒疗,當方法M2 return后將返回至M1方法中侵歇,方法M2中的局部變量int a,int b吓蘑,都將壓入棧中惕虑。如此到整個M1方法調(diào)用完成。
裝箱
裝箱即值類型向引用類型轉(zhuǎn)換時發(fā)生的操作磨镶。
對一個值類型進行的裝箱溃蔫,在內(nèi)部的操作:
1.在托管堆中分好內(nèi)存,其中包括了兩個額外成員(類型對象指針和同步索引塊)的內(nèi)存琳猫。
2.值類型的字段賦值到新分配的內(nèi)存伟叛。
3.返回對象的引用地址。現(xiàn)在的值類型就是一個引用類型了沸移。
拆箱
拆箱即引用類型向值類型轉(zhuǎn)換時發(fā)生的操作痪伦。
拆箱的操作
1.如果為待拆箱對象為null,拋出NullReferenceException異常雹锣。(空引用異常)
2.如果引用指向的不是一個期望對象的已裝箱對象网沾,拋出InvalidCastException異常。(指定轉(zhuǎn)換無效)
獲取已裝箱對象中各個字段的地址蕊爵,這個過程就是“拆箱”
需要說明的是一般拆箱以后會伴隨著對象的拷貝辉哥,但拷貝操作已經(jīng)不是拆箱的范疇。