對(duì)于任何類型的框類都又如下的形。 //------------------------------------------------------ class t_point { t x,y; t_point(t x,y) { this.x=x; this.y=y } } //-------------------------------------------------------- class test{ class point { public int x, y; public point(int x, int y) { this.x = x; this.y = y; } }
public static void main() { point p = new point(10, 10); object f = p; p.x = 20; console.write(((point)f).x); console.write(p.x); } }
讓我么來(lái)看一看最后的結(jié)果是什么?很奇怪嗎,結(jié)果是20,20.在第二次指定變量后,p 和 f 指向同一對(duì)象。這意味著修改 p 的名稱也將改變 f 的名稱,因?yàn)樗鼈円猛粚?shí)例。修改類值的成員稱為“變更者”,而不具有任何變更者的類稱為不可變類。不可變類的存在可以使類的行為類似于值類,但不能寫(xiě)入為值類。
int i = 123; object k = i;// 將 int i 加框到對(duì)象 k 中 int j=(int)k; // 解框 k 到 value2
當(dāng)賦值給 k 時(shí),作為賦值的一部分,c# 編譯器將創(chuàng)建足夠容納堆中 int 的引用類型包裝,將值復(fù)制到該加框,然后將加框標(biāo)記為實(shí)際類型,以便運(yùn)行時(shí)了解加框的類型。要從加框中取值,必須使用強(qiáng)制類型裝換來(lái)指定加框的類型(對(duì)象能夠保留任何類型)。在執(zhí)行過(guò)程中,運(yùn)行時(shí)將檢查對(duì)象變量引用的類型是否為強(qiáng)制類型轉(zhuǎn)換 中指定的類型。如果類型正確,值將從加框中復(fù)制回值類型變量。如果類型不正確,將導(dǎo)致異常。請(qǐng)注意解除加框過(guò)程中不會(huì)進(jìn)行其他轉(zhuǎn)換;類型必須完全匹配。
請(qǐng)注意以下代碼:
long i = 123; object k = i;// 將 long i 加框到對(duì)象 k 中 ulong j=(ulong)k;