1. 程式人生 > >C#-----值型別引用型別

C#-----值型別引用型別

值型別和引用型別 C#中的變數可以劃分為值型別(Value Type)和引用型別(Reference)兩種: 值型別:簡單型別、結構型別、列舉型別 引用型別:類、陣列、介面。 值型別轉為引用型別稱成為裝箱,引用型別轉為值型別稱為拆箱。 在這裡插入圖片描述 值型別的值存在棧上,棧上存的是地址,值在堆上。

在這裡插入圖片描述 堆和棧的區別? 棧是編譯期間就分配好的記憶體空間,因此你的程式碼眾必須就棧的大小有明確的定義;區域性值型別變數、值型別引數等都在棧記憶體中。 堆是程式執行期間動態分配的記憶體空間,你可以根據程式的執行情況確定要分配的堆記憶體的大小。

值型別和引用型別的區別? 1)將一個值型別變數賦給另一個值型別變數時,將複製包含的值。引用型別變數的賦值只複製對物件的引用,而不復制物件本身。 2)值型別不可能派生出新的型別:所有的值型別均隱式派生自System.ValueType。但與引用型別相同的是,結構也可以實現介面。 3)值型別不可能包含null值。 4)每種值型別均有一個隱式的預設建構函式來初始化該函式的預設值。

類和結構對於建構函式的區別? 類 類中預設的有一個無引數的建構函式。 當在類中寫一個有引數的建構函式,預設無引數的建構函式被取消了。 類中寫建構函式引數列表中引數個數可以不確定。 結構 在結構中預設的也有一個無引數的建構函式。 當在結構中寫一個有引數的建構函式,預設的無引數的建構函式還有,沒有取消。 在結構中寫建構函式,要把所有的欄位都要完全賦值。