C# 資料型別



在C# 中,變數分為以下幾種型別:

  • 值型別(Value types)

  • 引用型(Reference types)

  • 指標類型(Pointer types)

值型別(Value types)

#值型別變數可以直接分配給一個值。它們是從類別 System.ValueType 中派生的。

值類型直接包含資料。例如 int、char、float,它們分別儲存數字、字母、浮點數。當您聲明一個 int 類型時,系統分配記憶體來儲存值。

下表列出了C# 2010 中可用的值類型:

##描述bool#bytechardecimal28#double-324#float38intlongsbyteshortuintulong#ushort#0 到65,535
類型## 範圍預設值
布林值True 或FalseFalse
8 位元無符號整數0 到2550
16 位元Unicode 字元U +0000 到U +ffff'\0'
#128位元精確的十進制值,28-29 有效位數(-7.9 x 10 到7.9 x 1028) / 100 到280.0M
64 位元雙精確度浮點型 #(+/-)5.0 x 10 到(+/-)1.7 x 103080.0D
32 位元單精確度浮點型-3.4 x 10 到+ 3.4 x 1038 #0.0F
#32 位元有符號整數型別-2,147,483,648 到2,147,483,6470
64 位元有符號整數型別-923,372,036,854,775,808 到 9,223,372,036,854,775,807#0L
8 位元有符號整數型別-128 到1270
16 位元有符號整數型別-32,768 到32,7670
32 位元無符號整數型別0 到4,294,967,2950
#64 位元無符號整數型別0 到18,446,744,073,709,551,6150
16 位元無符號整數類型ushort16 位元無符號整數型別
0#############

如需取得一個類型或一個變數在特定平台上的準確尺寸,可以使用 sizeof 法。表達式 sizeof(type) 產生以位元組為單位儲存物件或類型的儲存尺寸。以下舉例取得任何機器上 int 類型的儲存尺寸:

namespace DataTypeApplication
{
   class Program
   {
     #      {
         Console.WriteLine("Size of int: {0}", sizeof(int));# )#    }
}


#當上面的程式碼被編譯和執行時,它會產生下列結果:
##Size of int: 4

引用型別(Reference types)
引用類型不包含儲存在變數中的實際數據,但它們包含對變數的引用。
換句話說,它們指的是一個記憶體位置。使用多個變數時,引用類型可以指向一個記憶體位置。如果記憶體位置的資料是由一個變數改變的,其他變數會自動反映這種值的變化。內建的 引用類型有:object、dynamic 和 string。

物件(Object)類型

物件(Object)類型 是 C# 通用類型系統(Common Type System - CTS)中所有資料類型的終極基底類別。 Object 是 System.Object 類別的別名。所以物件(Object)類型可以被指派任何其他類型(值類型、參考類型、預定義類型或使用者自訂類型)的值。但是,在分配值之前,需要先進行型別轉換。

當一個值型別轉換為物件型別時,則稱為 裝箱;另一方面,當一個物件型別轉換為值型別時,則稱為 拆箱。

object obj;

obj = 100; // 這是裝箱

動態(Dynamic)類型

您可以儲存任何類型的值在動態資料類型變數中。這些變數的類型檢查是在運行時發生的。
宣告動態型別的語法:

dynamic <variable_name> = value;

##例如:

dynamic d = 20;
#

動態類型與物件類型相似,但是物件類型變數的類型檢查是在編譯時發生的,而動態類型變數的類型檢查是在執行時發生的。

字串(String)類型

字串(String)類型 允許您給變數分配任何字串值。字串(String)類型是 System.String 類別的別名。它是從物件(Object)類型派生的。字串(String)類型的值可以透過兩種形式進行分配:引號和 @引號。

例如:

String str = "w3cschool.cc";

一個@引號字串:

# @"w3cschool.cc";

C# string 字串的前面可以加上@(稱為"逐字字串")將轉義字元(\)當作普通字元對待,例如:

string str = @"C:\Windows";

等價於:

string str = "C:\\ Windows";

@ 字串中可以任意換行,換行符號及縮排空格都計算在字串長度之內。

string str = @"<script type=""text/javascript"">
    <!--
#    -->##  <!--
#    -->## ;";

使用者自訂參考類型有:class、interface 或delegate。我們將在以後的章節中討論這些類型。

指標類型(Pointer types)

指標類型變數儲存另一種類型的記憶體位址。 C# 中的指標與 C 或 C++ 中的指標具有相同的功能。

宣告指標類型的語法:

type* identifier;
##例如:

char* cptr;
int* iptr;
我們將在章節"不安全的程式碼"中討論指標類型。