【C#之值型別vs引用型別】
前言
C#的資料型別分為兩種,一種是值型別,一種是資料型別,從巨集觀上來看,感覺很重要的,並且很容易弄混,所以,這篇部落格以值型別& 引用型別為主角,以對比的形式進行分析,並加以舉例,下面我們們一起來走進他們的別具一格的世界。
分述
(一)棧和堆重溫
值型別和引用型別的學習涉及到棧和堆的知識,在這裡,我們們來回憶一下,什麼是棧?什麼是堆?詳情請看之前的部落格:【C#之棧和堆初遇】
1.棧
編譯期間就分配好的記憶體空間,因此程式碼中必須有棧的大小明確的定義;區域性值型別變數、值型別引數等都在棧記憶體。
2.堆
程式執行期間動態分配的記憶體空間,可以根據程式的執行情況確定要分配堆記憶體得大小。
(二)值型別
1.定義
值型別:值存在棧上
2.類別
(三)引用型別
1.定義
引用型別 : 棧上存地址 堆上存值
2.類別
(四)對比
1.區別
A.導圖先看
B.詳細解說
·將一個值型別變數賦給另一個值型別變數時,將複製包含的值
引用型別變數的賦值只複製對物件的引用,而不復制物件的本身
·繼承System.Value的型別都是值型別,其他的屬於引用型別
·值型別不可能派生出新的型別:所有的值型別均隱式派生自System.ValueType,值型別結構與引用型別相同的是,結構可以實現介面
·值型別不可能包含null值,而引用型別可以
·每種值型別均有一個隱式的預設建構函式來初始化該型別的預設值
C.儲存
D.適用
值型別:在記憶體管理方面具有更好的效率,適用於做儲存資料的載體,但不支援多型
引用型別:支援多型,適用 於定義應用程式行為。
總結
知識在不斷的學習過程中,對於值型別和引用型別,在以後的學習中,會有更深的理解,有不對的地方希望大家指正!
相關文章
- c#:值型別&引用型別C#型別
- Structs vs classes(值型別vs引用型別)Struct型別
- C#的型別——值型別與引用型別C#型別
- C#學習筆記之值型別與引用型別C#筆記型別
- C# 物件比較(值型別、引用型別)C#物件型別
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- 值型別和引用型別型別
- 值型別與引用型別型別
- JavaScript值型別和引用型別JavaScript型別
- Swift值型別和引用型別Swift型別
- 值型別與引用型別的區別型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- 圖解C#的值型別,引用型別,棧,堆,ref,out圖解C#型別
- c#中值型別和引用型別的區別C#型別
- C#引用型別和值型別在堆、棧中的儲存C#型別
- 區別值型別資料和引用型別資料型別
- 引用型別之Object型別Object
- Swift 中的值型別與引用型別使用指北Swift型別
- 從賦值看基本型別和引用型別的區別賦值型別
- Python引用型別和值型別的區別與使用Python型別
- javascript原始值和引用值型別及區別JavaScript型別
- 基本資料型別和引用型別的初始值資料型別
- JavaScript引用型別-Object型別JavaScript型別Object
- 引用型別之 Object(三)型別Object
- 引用型別型別
- Hellow C# unity學習記錄(7)值型別引用型別以及引數傳遞C#Unity型別
- 33 個 JavaScript 核心概念系列(二): 值型別與引用型別JavaScript型別
- JavaScript 值型別和引用型別在堆疊中的存放JavaScript型別
- ECMAScript 原始型別與引用型別型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- js基本型別和引用型別區別JS型別
- JAVA 基本型別與 引用型別區別Java型別
- golang中 值型別,指標,引用的區別Golang型別指標
- 【MySQL資料型別1之--數值型別】MySql資料型別
- Java的基本型別和引用型別Java型別