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