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:代表無符號的32位整數,範圍從0 ~ 4294967295
long:代表有符號的64位整數,範圍從-9223372036854775808 ~ 9223372036854775808
ulong:代表無符號的64位整數,範圍從0 ~ 18446744073709551615。
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, \0 表示空字元
5, \a 用來表示感嘆號
6, \b 用來表示退格
7, \f 用來表示換頁
8, \n 用來表示換行
9, \r 用來表示回車
10, \t 用來表示水平tab
11, \v 用來表示垂直tab
1.1.2 浮點型別
c#支援兩種浮點型別:float和double。
float型所能表示的值的範圍大約可以從1.5*10 -45~3.4* 10 38,精確到小數點後面7位。
double型所能表示的值的範圍大約可以從5.0*10 -324~1.7* 10 308,精確到小數點後面15位或16位。
如果二元操作中的其中乙個運算元為浮點型別,那麼另外乙個運算元是整型或浮點型別,運算規則如下:
a,如果其中乙個運算元是整型,則運算元被轉換為另乙個運算元的浮點數型別;
b,如果運算元之一為double,則另一運算元也被轉換成double型別,運算以double型別的精度和取值範圍進行,並且所得結果也為double型別;
c,否則,運算至少將以float型別的取值範圍和精度進行,並且所得結果也為float型。
1.1.3 小數(decimal)型別
小數型別非常適用於金融和貨幣運算。數值範圍從1.0*10 -28~7.9* 10 28,精確到小數點後面28位。如果二元操作中的其中乙個運算元是小數型別,那麼另外乙個從運算元是整型或小數型別。整型在運算前被轉化為小數型別數。如果乙個小數型別的算術運算產生了乙個對於小數型別的格式來說太小的值,操作的結果將會變成0。如果乙個小數型別的算術運算產生了乙個對於小數型別的格式來說太大的值,就會觸發溢位錯誤。小數型別較浮點型別而言,具有更大的精確度,但是數值範圍相對小了很多。將浮點型別的數向小數型別的數轉化時會產生溢位錯誤,將小數型別的數向浮點型別的數轉化時會造成精確度的損失。因此,兩種型別不存在隱式或顯式轉換。布林型:值為true或false。沒有標準能實現布林型別和其他型別的轉換。
1.2 列舉型別
列舉型別的元素使用的型別只能是long,int,short,byte。預設型別是int。預設第乙個元素的值是0,每乙個連續的元素按1遞增。可以給元素直接賦值。如:
[csharp]view plain
copy
print?
enum
monthnames
; 可以強制定義其他型別,如:
enum
monthnames :
byte
;
1.3結構型別
結構型別也是一種值型別,使用它的目的是用於建立小型的物件,用以節省記憶體。下面的例子表示乙個使用byte型別的4個字段的ip位址。
[csharp]view plain
copy
print?
using
system;
struct ip //宣告結構
class test
.。", myip.b1, myip.b2);
console.write("."
, myip.b3, myip.b4);
} }
2 引用型別
引用型別包括類型別,介面型別,代表型別和陣列型別。
2.1 類型別
類 型別定義了一種資料結構,這個資料結構中包含了資料成員(如常量,欄位和事件等),函式成員(如方法,屬性,索引,操作,建構函式和析構函式等)和巢狀 型別。支援繼承。
2.2 物件型別
物件型別是其他所有型別最終的基礎型別。在c#中每一種型別都直接或者間接的源於object這個類型別。
2.3 字串型別
字串型別是直接從object中繼承而來的密封類。string型別的值可以寫成字串文字的形式。
2.4 介面型別
乙個介面宣告乙個只有抽象成員的引用型別,介面僅僅存在方法標誌,但沒有執行**。當定義乙個類時,如果類從介面派生,可以派生自多重介面;但是如果類從類派生,就只能從乙個類派生。
宣告方法如例:
[html]view plain
copy
print?
inte***ce iface
2.5 代表型別
代表引用一種靜態的方法或者物件例項,引用該物件的例項方法。與其接近的是c/c++中的指標,但指標只能訪問靜態的函式,代表既能訪問靜態的方法,也能訪問例項的方法。
2.6 陣列
陣列是包含一串變數的資料結構。陣列變數也稱做陣列元素,它們具有相同的型別,這種型別也稱做陣列元素型別。陣列的元素型別可以是任何型別,包括陣列型別。陣列用下標確定每乙個陣列元素的索引號。只有乙個下標的陣列稱為一維陣列,多於乙個下標的陣列稱為
多維陣列。
例:int a=; 等價於int a=new int ;
也可以這樣初始化: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型的陣列的陣列
inta; //int型的陣列的陣列的陣列
陣列的每個維數的長度不是陣列型別的一部分,維數的長度是在陣列建立語句中指定的,而不是在陣列型別中
指定的,例如:
int[,,] a3=new int[10,20,30];
a3是是乙個陣列變數, int[,,] 沒有指定陣列的長度,陣列建立語句new int[10,20,30]才指定。
下面的例子建立乙個陣列的陣列:
int j=new int[3];
j[0]=new int ;
j[1]=new int ;
j[2]=new int ;
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...