【C#之值型別vs引用型別】

我是太陽啦啦啦發表於2016-02-03

前言

C#的資料型別分為兩種,一種是值型別,一種是資料型別,從巨集觀上來看,感覺很重要的,並且很容易弄混,所以,這篇部落格以值型別& 引用型別為主角,以對比的形式進行分析,並加以舉例,下面我們們一起來走進他們的別具一格的世界。

分述

(一)棧和堆重溫

值型別和引用型別的學習涉及到棧和堆的知識,在這裡,我們們來回憶一下,什麼是棧?什麼是堆?詳情請看之前的部落格:【C#之棧和堆初遇】

1.棧

編譯期間就分配好的記憶體空間,因此程式碼中必須有棧的大小明確的定義;區域性值型別變數、值型別引數等都在棧記憶體

2.堆

程式執行期間動態分配的記憶體空間,可以根據程式的執行情況確定要分配堆記憶體得大小。

(二)值型別

1.定義

值型別值存在棧上

2.類別

 (三)引用型別

1.定義

引用型別 : 棧上存地址   堆上存值

2.類別


(四)對比

1.區別

A.導圖先看

B.詳細解說

·將一個值型別變數賦給另一個值型別變數時,將複製包含的值
引用型別變數的賦值只複製對物件的引用,而不復制物件的本身
·繼承System.Value的型別都是值型別,其他的屬於引用型別
·值型別不可能派生出新的型別:所有的值型別均隱式派生自System.ValueType,值型別結構與引用型別相同的是,結構可以實現介面
·值型別不可能包含null值,而引用型別可以
·每種值型別均有一個隱式的預設建構函式來初始化該型別的預設值

C.儲存

D.適用

值型別:在記憶體管理方面具有更好的效率,適用於做儲存資料的載體,但不支援多型
        引用型別:支援多型,適用 於定義應用程式行為。

         

總結

知識在不斷的學習過程中,對於值型別和引用型別,在以後的學習中,會有更深的理解,有不對的地方希望大家指正!

相關文章