C# 實值型別和參考型別的區別

來源:互聯網
上載者:User

標籤:重寫   執行個體   數值   char   csdn   並且   判斷   定義   size   

C#實值型別和參考型別區別

實值型別包括byte,short,int,long,float,double,decimal,char,bool 和 struct ,枚舉,可空類型。實值型別變數聲明後,不管是否已經賦值,編譯器為其分配記憶體;

參考型別包括string 和 class,數組,介面,委託,object。當聲明一個類時,只在棧中分配一小片記憶體用於容納一個地址,而此時並沒有為其分配堆上的記憶體空間。當使用 new 建立一個類的執行個體時,分配堆上的空間,並把堆上空間的地址儲存到棧上分配的小片空間中。

 

實值型別的執行個體通常是線上程棧上分配的(靜態分配),但是在某些情形下可以儲存在堆中。參考型別的對象總是在進程堆中分配(動態分配)。

 

需要注意的是:引 用類型和實值型別都繼承自System.Object類。不同的是,幾乎所有的參考型別都直接從System.Object繼承,而實值型別則繼承其子類System.ValueType。System.ValueType直接派生於System.Object。即System.ValueType本身是一個類類型,而不是實值型別。其關鍵在於ValueType重寫了Equals()方法,從而對實值型別按照執行個體的值來比較,而不是引用地址來比較。

可以用Type.IsValueType屬性來判斷一個類型是否為實值型別,

 

參考型別與實值型別相同的是,結構體也可以實現介面;
參考型別可以派生出新的類型,而實值型別不能;
參考型別可以包含null值,實值型別不能(可空類型功能允許將 null 賦給實值型別);
參考型別變數的賦值只複製對對象的引用,而不複製對象本身。而將一個實值型別變數賦給另一個實值型別變數時,將複製包含的值。

 

 

實值型別和參考型別的區別 相同點:參考型別可以實現介面,實值型別當中的結構體也可以實現介面;參考型別和實值型別都繼承自System.Object類。 不同點:1)範圍
C#的實值型別包括:結構體(數實值型別、bool型、使用者自訂的結構體),枚舉,可空類型。
C#的參考型別包括:數組,使用者自訂的類、介面、委託,object,字串。

 

2)記憶體配置:

數組的元素不管是參考型別還是實值型別,都儲存在託管堆上。

參考型別在棧中儲存一個引用,其實際的儲存位置位於託管堆。簡稱參考型別部署在託管推上。而實值型別總是分配在它聲明的地方:作為欄位時,跟隨其所屬的變數(實 例)儲存;作為局部變數時,儲存在棧上。(棧的記憶體是自動釋放的,堆記憶體是.NET中會由GC來自動釋放)

3)適用場合

實值型別在記憶體管理方面具有更好的效率,並且不支援多態,適合用做儲存資料的載體;參考型別支援多態,適合用於定義應用程式的行為。

1.參考型別可以派生出新的類型,而實值型別不能,因為所有的實值型別都是密封(seal)的;

2.參考型別可以包含null值,實值型別不能(可空類型功能允許將 null 賦給實值型別,如   int? a = null;  );

3.參考型別變數的賦值只複製對對象的引用,而不複製對象本身。而將一個實值型別變數賦給另一個實值型別變數時,將複製包含的值。


 

 

 

C# 實值型別和參考型別的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.