本篇文章粗略地說(shuō)明了C#引用類(lèi)型的種類(lèi)和含義,如有對(duì)C#引用類(lèi)型有疑問(wèn)的可以參考一下,但對(duì)于引用類(lèi)型的理解可能有誤,希望高手能留言指教。
C#中的主要引用類(lèi)型有:數(shù)組,類(lèi),接口和委托。即,這些數(shù)據(jù)類(lèi)型在內(nèi)存中不存儲(chǔ)真正的值,而存儲(chǔ)的是值的地址。
值類(lèi)型變量直接把變量的值保存在堆棧中,引用類(lèi)型的變量把實(shí)際數(shù)據(jù)的地址保存在堆棧中,而實(shí)際數(shù)據(jù)則保存在堆中。注意,堆和堆棧是兩個(gè)不同的概念,在內(nèi)存中的存儲(chǔ)位置也不相同,堆一般用于存儲(chǔ)可變長(zhǎng)度的數(shù)據(jù),如字符串類(lèi)型;而堆棧則用于存儲(chǔ)固定長(zhǎng)度的數(shù)據(jù),如整型類(lèi)型的數(shù)據(jù)int(每個(gè)int變量占用四個(gè)字節(jié))。由數(shù)據(jù)存儲(chǔ)的位置可以得知,當(dāng)把一個(gè)值變量賦給另一個(gè)值變量時(shí),會(huì)在堆棧中保存兩個(gè)完全相同的值;而把一個(gè)引用變量賦給另一個(gè)引用變量,則會(huì)在堆棧中保存對(duì)同一個(gè)堆位置的兩個(gè)引用,即在堆棧中保存的是同一個(gè)堆的地址。在進(jìn)行數(shù)據(jù)操作時(shí),對(duì)于值類(lèi)型,由于每個(gè)變量都有自己的值,因此對(duì)一個(gè)變量的操作不會(huì)影響到其它變量;對(duì)于引用類(lèi)型的變量,對(duì)一個(gè)變量的數(shù)據(jù)進(jìn)行操作就是對(duì)這個(gè)變量在堆中的數(shù)據(jù)進(jìn)行操作,如果兩個(gè)引用類(lèi)型的變量引用同一個(gè)對(duì)象,實(shí)際含義就是它們?cè)诙褩V斜4娴亩训牡刂废嗤虼藢?duì)一個(gè)變量的操作就會(huì)影響到引用同一個(gè)對(duì)象的另一個(gè)變量。
|
新聞熱點(diǎn)
疑難解答