C#程式基礎--基礎型別 Value Type、Reference Type、Pointer Type

莊創偉
2 min readJul 24, 2018

C#所有的型別可區分為兩種。簡單介紹如下

Value Type

實值型別。顧名思義儲存的是實體的值,也就是記憶體位址。每個實體型別宣告的變數各對應一組記憶體位址,記憶體位址存放該變數的值。

Value Type包含兩大類

  • 結構(struct)
    數值型別整數型別(byte,char,int,….)、浮點類型(double,float)、decimal(精度類型)
    布林
    使用者自訂(宣告為struct 的自訂類別)
    *詳可見MSDN
  • 列舉(enum)
    各種自定義的列舉
    *詳可見MSDN

Reference Type

參考型別。顧名思義儲存的是一個參考位址而非實體的值。所以會有兩個變數同時對應到同一個實體位址,而導致互相修改與影響的情形。

內建的參考型別有

  • dynamic
  • object
  • string (*string是特殊的參考型別,原型是char[]。C#中可以直接將其視為實值型別)

另可以關鍵字 classinterfacedelegate進行宣告

以下是簡單的範例

重點小記

  • 實體型別每次異動都會配置一個新的記憶體位址(所以盡量不要跑迴圈組大型字串,請愛用StringBuilder)
  • 參考型別創建時配置的是參考位址,複製(=、Clone)時複製的是參考位址非實際物件內容(但是裡面的實體型別可以複製下來),要完整複製須使用物件序列化再反序列化
  • 實體型別的記憶體配置與回收由系統自行處理
  • 參考型別的記憶體回收需自行控制(C#有自主回收機制)

補充

Pointer Type *

指標型別。C#預設為不開啟。只有在unsafe模式中可以使用。主要在處理實體型別會自動配置記憶體的問題。只有實體型別可以設為指標型別。一般用不太到MSDN說明

--

--

莊創偉

學海無涯。但是為了生計還是得下海的風塵男子