C#的資料型別可分為3類:數值類型,引用類型,指標型別。指標類型僅在不安全程式碼中使用。
值類型包括簡單類型(如字元型,浮點型和整數型等),集合類型和結構型。引用類型包括類別類型,介面類型,代表類型和陣列類型。
值類型和引用類型的不同之處是值類型的變數值直接包含數據,而引用類型的變數則將它們的引用儲存在物件中。對於引用類型的變量,完全有可能讓兩個不同的變數引用同一個對象,這樣一來,對其中一個變數的操作就會影響到被另一個變數所引用的物件。對於值類型的變數而言,每一個變數都有它們自己的數值,因此對其中一個變數的操作不可能影響到另一個變數。
1 值型別
所有的值型別都隱含地宣告了一個公用的無參數的建構函數,這個建構子叫做預設建構子。預設建構函數傳回初始為零的值類型的實例,稱之為預設值。
對於sbyte,byte,short,ushort,int,uint,long,ulong,預設值為0。
對於char,預設值是'x0000'
對於float,預設值是0。0F
對於double,預設值是0。0D
對於decimal,預設值是0。0M
對於bool,預設值是false
對於一個枚舉類型,預設值是0
對於一個結構類型,預設值的設定就是把所有值類型的域都設定為它們各自的預設值,把所有的引用類型的域賦為空
1.1 簡單類型
C#提供一套預先定義的結構類型稱為簡單型別。簡單型別用保留字定義,這些保留字只是在System名字空間裡預先定義的結構型別的化名。例如int是保留字,System。 Int32是在System名字空間中預先定義類型。一個簡單型別和它化名的結構型別是完全一樣的,也就是說寫int和寫System。 Int32是一樣的。簡單型別主要有整數,浮點數型,小數型,布林型,字型
1.1.1 整數型
C#中支援9種整數:sbyte,byte,short,ushort,int,uint,long, ulong和char。
Sbyte:代表有符號的8位元整數,數值範圍從-128 ~ 127
Byte:代表無符號的8位元整數,數值範圍從0~255
Short:代表有符號的16位元整數,範圍從-32768 ~ 32767
ushort:代表有符號的16位整數,範圍從-32768 ~ 32767
Int:代表有符號的32位整數,範圍從-2147483648 ~ 2147483648 uint: 302: 2147483648 uint: ~ 4294967295
Long:代表有符號的64位元整數,範圍從-9223372036854775808 ~ 9223372036854775808
Ulong:代表無符號的64136854775808
Ulong:代表無符號的6413857417575725725727250725727251725725727272072。
char:代表無符號的16位元整數,數值範圍從0~65535。
Char類型的可能值對應於統一字元編碼標準(Unicode)的字元集。
Char類型與其他整數類型相比有以下兩點不同之處:
a,沒有其他類型到char類型的隱式轉換。即使是對於sbyte,byte和ushort這樣能完全使用char類型代表其值的類型, sbyte,byte和ushort到char的隱式轉換也不存在。
b,char類型的常數必須寫為字元形式,如果用整數形式,則必須帶有型別轉換前綴。例如(char)10賦值形式有三種:
char chsomechar="A";
char chsomechar="x0065"; 十六進位
char chsomechar="u0065 ; unicode表示法
字元型中有下列轉義符:
1,'用來表示單引號
2,"用來表示雙引號
3,\ 用來表示反斜線
4,小數類型非常適合金融和貨幣運算。數值範圍從1.0*10 -28~7.9* 10 28,精確到小數點後面28位。如果二元運算中的其中一個運算元是小數型,那麼另一個從運算元是整數或小數型。整數型在運算前被轉換為小數類型數。如果一個小數類型的算術運算產生了一個對於小數類型的格式來說太小的值,操作的結果將會變成0。如果一個小數類型的算術運算產生了一個對於小數類型的格式來說太大的值,就會觸發溢位錯誤。小數類型較浮點類型而言,具有更大的精確度,但是數值範圍相對小了許多。將浮點類型的數轉換成小數類型的數時會產生溢位錯誤,將小數類型的數轉換成浮點類型的數時會造成精確度的損失。因此,兩種類型不存在隱式或顯式轉換。布林型:值為true或false。沒有標準能實現布林類型和其他類型的轉換。
1.2 枚舉型別
枚舉型別的元素所使用的型別只能是long,int,short,byte。預設類型是int。預設第一個元素的值是0,每一個連續的元素按1遞增。可以給元素直接賦值。如:
enum monthnames { January=1, February, march=31 }; 可以强制定义其他类型,如: enum monthnames : byte {January , February, March };
1.3結構類型
結構類型也是一種值類型,使用它的目的是用於創建小型的對象,用於節省記憶體。下面的例子表示一個使用byte類型的4個欄位的IP位址。
using System; Struct IP //声明结构 { public byte b1,b2,b3,b4; } Class test { public static void Main() { IP myIP; myIP.b1=192; myIP.b2=168; myIP.b3=1; myIP.b4=101; Console.Write("{0}.{1}。", myIP.b1, myIP.b2); Console.Write("{0}.{1}", myIP.b3, myIP.b4); } }
2 引用類型
引用類型包括類別類型,介面類型,代表類型和陣列類型。
2.1 類別類型
類別類型定義了一種資料結構,這個資料結構中包含了資料成員(如常數,欄位和事件等),函數成員(如方法,屬性,索引,操作,建構子和析構函數等)和巢狀類型。支援繼承。
2.2 物件類型
物件類型是其他所有類型最終的基礎類型。在C#中每一種類型都直接或間接的源自於object這個類別類型。
2.3 字串型別
字串型別是直接從object繼承而來的密封類別。 String類型的值可以寫成字串文字的形式。
2.4 介面類型
一個介面宣告一個只有抽象成員的參考類型,介面只存在方法標誌,但沒有執行程式碼。定義一個類別時,如果類別從介面派生,可以派生自多重介面;但是如果類別從類別派生,就只能從一個類別派生。
宣告方法如例:
interface iface { void showmyface(); }
2.5 代表型別
代表引用一個靜態的方法或物件實例,引用該物件的實例方法。與其接近的是c/c++中的指針,但指針只能存取靜態的函數,代表既能存取靜態的方法,也能存取實例的方法。
2.6 數組
數組是包含一串變數的資料結構。數組變數也稱為做數組元素,它們具有相同的類型,這種類型也稱為做數組元素類型。數組的元素類型可以是任何類型,包括數組類型。數組用下標確定每一個數組元素的索引號。只有一個下標的陣列稱為一維數組,多於一個下標的數組稱為
多維數組。
例:int[] a={0,2,4,6,8}; 等價於int[] a=new int[] {0,2,4,6,8};
也可以這樣初始化: a[0]=0; a[1]=2; a[2]=4; a[3]=6; a[4]=8;
int[] a; //int型的一維陣列
int[,] a; //int型的二維數組
int[,,] a; //int型的三維數組
int[] []a; //int型的數組的數組
int[][ ][]a; //int型的數組的數組的數組
數組的每個維數的長度不是數組類型的一部分,維數的長度是在數組創建語句中指定的,而不是在數組類型中
指定的,例如:
int[,,] a3=new int[10,20,30];
a3是是一個數組變量, int[,,] 沒有指定數組的長度,數組創建語句new int[10, 20,30]才指定。
下面的範例建立一個陣列的陣列:
int[][] J=new int[3][];
J[0]=new int[] {1,2,3};
J[1]= new int[] {1,2,3,4,5,6};
J[2]=new int[] {1,2,3,4,5,6,7,8,9};
以上就是C#資料類型 的內容,更多相關內容請關注PHP中文網(www.php.cn)!