資料類型
C#的資料類型分為三大類,分別為實值型別、參考型別和類型轉換。
實值型別包括三種,分別為簡單類型、結構類型和枚舉類型。其中簡單類型又包括整數型、浮點型、小數型和布爾型。C#中的簡單類型和VB中的數值型是有些地方是相似的,這個可以將二者比較起來進行掌握。VB中的數值型包括整數型(整型和長整型)、浮點型(單精確度浮點型、雙精確度浮點型)、貨幣型和位元組型。
可是有一點需要明確的是,浮點型資料就是用來表示帶有小數的實數的,可C#中為什麼又單列出小數型這一資料類型呢?原來C#中的小數類型是高精度的資料類型,佔用16個位元組,主要是為了滿足需要高精度的財務和金榮電腦領域,小數類型資料的範圍遠遠小於浮點型,但它比浮點型的精確度要高得多。二者區分的標準為小數類型資料後面有m或者M,否則系統就會把其當做標準的浮點型去處理了。
但是我們在實際操作中,往往會遇到這樣的情況,那就是有些資料資訊是由若干資料類型的資料群組合起來的,我們不能單單通過定義一個數組來涵蓋處理所有的資訊,這時就要用到結構類型了。結構類型是把不同類型資料資訊組合在一起形成的組合類別型,其中的結構是使用者自訂的資料類型。下面通過一個例子簡單說明一下。
下面是一個關於結構類型的舉例
#region 這是一個結構類型 struct WorkerInformation //定義一個工廠員工資訊的結構類型 { long cardNo; //定義結構的資料成員,包括卡號;姓名;性別;家庭住址;連絡方式 string name; string sex; int age; string address; long telephone; void structmethod() { //可執行檔代碼 } }#endregion
例子很簡單,上面也加了注釋,這裡就不進一步解釋了。
下面來說一下枚舉,那麼什麼是枚舉呢?用一句話來概括一下,枚舉類型就是將一個變數所有的值一一列出來,而這個變數在所列的範圍內取值。定義枚舉的方法是使用enum關鍵字。下面通過一個例子來說明一下。
enum family { grandfather,grandmother,father,mother,sister,me; }
這個例子就是一個很簡單的枚舉,通過定義一個family這個變數,把這個變數裡的所有值一一列出來。
下面說一下參考型別,它是C#中和實值型別並列的類型,它與實值型別的區別在於他們在記憶體中的儲存方式。實值型別儲存在棧中,參考型別所儲存的實際資料是當前引用值的地址,而當前引用值這個對象本身儲存在記憶體堆中。說起來有些拗口。換句話來說,單一資料型別儲存的是自身的值,而參考型別儲存的是將自身的值直接指向到某個對象的值。說到這裡,又不免提一下堆和棧。
這裡需要提一下的是堆和棧的區別。棧用於儲存固定長度的資料;堆是由new分配的記憶體,一般速度比較慢,而且容易產生記憶體片段,不過使用方便。在C#中基礎資料型別 (Elementary Data Type)Bool和Long都是實值型別。相反,大多數複雜的C#資料類型包括我們自己聲明的類都是引用類,它們分配在堆中。
最後說一下類型轉換,資料類型在一定條件下可以相互轉換,C#中允許有兩種轉換方式,即隱式轉換(implicit conversions)和顯式轉換(explicit conversions)。隱式轉換是系統預設的,不需要聲明就可以進行轉換;相反,顯式轉換需要使用者明確的指定轉換類型,一般在不存在該類型的隱式轉換的情況下才使用。
相比之下,VB的資料類型就清晰得多,VB提供的資料類型主要有數值型、字元型、布爾型、日期型、可變型和對象型。這裡我想說的是,每種程式設計語言,其資料類型都有出入,但是我們在掌握一門程式設計語言的同時,再繼續掌握其他程式設計語言時,就要比較之前所掌握的內容,將二者對立起來,相同的內容要繼續回顧,不同的地方要區別開來重點掌握,這才是我們學習時應該把握的一種技巧。