C 資料型別

2021-07-08 10:38:27 字數 1861 閱讀 2881

c#的資料型別可以分為3類:數值型別、引用型別和指標型別,指標型別僅在不安全**中使用。

從概念上看,值型別直接儲存其值,而引用型別儲存對其值的引用。c#中的每一種型別要麼是值型別,要麼是引用型別,所以每個物件要麼是值型別的例項,要麼是引用型別的例項。

一、值型別和引用型別的基類

引用型別和值型別都繼承自system.object類。不同的是,幾乎所有的引用型別都直接從system.object繼承,而值型別則繼承其子類,即直接繼承system.valuetype。

作為所有型別的基類,system.object提供了一組方法,這些方法在所有型別中都能找到,其中包括tostring方法及clone等方法。

二、堆和棧

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

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

三、值型別

c#的所有值型別均隱式派生自system.valuetype

各個值型別及其基類:

1、結構體:struct(直接派生於system.valuetype);

2、整型:short(system.int16),ushort(system.uint16),int(system.int32),uint(system.uint32),long(system.int64),ulong(system.uint64),sbyte(system.sbyte的別名),byte(system.byte);

3、字元型:char(system.char);

4、浮點型:float(system.single),double(system.double);

5、高精度decimal型:decimal(system.decimal);

6、bool型:bool(system.boolean的別名);

7、列舉:enum(派生於system.enum)

四、引用型別

當宣告乙個引用型別變數的時候,該引用型別的變數會被分配到堆疊上,這個變數將用於儲存位於堆上的該引用型別的例項的記憶體位址,變數本身不包含物件的資料。此時,如果僅僅宣告這樣乙個變數,由於在堆上還沒有建立型別的例項,因此,變數值為null,意思是不指向任何型別例項(堆上的物件)。對於變數的型別宣告,用於限制此變數可以儲存的型別。

各個引用型別及其基類:

1、陣列:(派生於system.array)陣列的元素,不管是引用型別還是值型別,都儲存在託管堆上;

2、類:class(派生於system.object);

3、介面:inte***ce(介面不是乙個「東西」,所以不存在派生於何處的問題。);

4、委託:delegate(派生於system.delegate);

5、object:(system.object的別名);

6、字串:string(system.string的別名)

五、值型別與引用型別的區別

1、將乙個值型別變數賦給另乙個值型別變數時,將複製包含的值。引用變數的賦值只賦值對物件的引用,而不複製物件本身;

2、值型別 不可能派生出新的型別:所有的值型別均隱式派生自system.valuetype,但與引用型別相同的是,結構也可以實現介面;

3、值型別不可能包含null值;

4、每種值型別均有乙個隱式的預設建構函式來初始化該型別的預設值。

C 資料型別

一般來說,計算機要儲存和處理不同的資料型別,在c 中有基本的資料型別和使用者自定義資料型別以及引用型資料。我們先學習下基本的資料型別,也就是系統自帶的資料型別。每種資料型別都要佔據系統記憶體的一定空間,例如c 中的整數int 乙個整數佔4個位元組,也就是32位 計算機是用0和1二進位制來表示和處理資...

c 資料型別

型別可分為 值型別,引用型別 值型別 直接存放真正的資料,值型別都有固定的長度,值型別的變數都儲存在 堆疊 stack 上。作為值型別的變數,每個都有自己的資料,因此對乙個變數的操作不會影響其他變數。引用型別 儲存讀資料的記憶體位址的引用,位於受管制的堆 heap 上作為引用型別的變數可以引 用同一...

C 資料型別

bool system.boolean 1位元組 byte system.byte 1位元組無符號 sbyte system.sbyte 1位元組有符號 short system.int16 2位元組 ushort system.uint16 2位元組 int system.int32 4位元組 u...