原文:https://blog.csdn.net/yysyangyangyangshan/article/details/7490939
C#的數(shù)據(jù)類型可以分為3類:數(shù)值類型帐要,引用類型,指針類型弥奸。指針類型僅在不安全代碼中使用榨惠。
值類型包括簡(jiǎn)單類型(如字符型,浮點(diǎn)型和整數(shù)型等)其爵,集合類型和結(jié)構(gòu)型冒冬。引用類型包括類類型,接口類型,代表類型和數(shù)組類型。
值類型和引用類型的不同之處是值類型的變量值直接包含數(shù)據(jù)果覆,而引用類型的變量把它們的引用存儲(chǔ)在對(duì)象中。對(duì)于引用類型的變量横侦,完全有可能讓兩個(gè)不同的變量引用同一個(gè)對(duì)象挥萌,這樣一來,對(duì)其中一個(gè)變量的操作就會(huì)影響到被另一個(gè)變量引用的對(duì)象枉侧。對(duì)于值類型的變量而言引瀑,每一個(gè)變量有它們自己的數(shù)值,因此對(duì)其中一個(gè)變量的操作不可能影響到另外一個(gè)變量榨馁。
1 值類型
所有的值類型都隱含地聲明了一個(gè)公共的無參數(shù)的構(gòu)造函數(shù)憨栽,這個(gè)構(gòu)造函數(shù)叫做默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)返回一個(gè)初始為零的值類型的實(shí)例翼虫,稱之為默認(rèn)值屑柔。
對(duì)于sbyte,byte珍剑,short掸宛,ushort,int招拙,uint唧瘾,long,ulong别凤,默認(rèn)值為0饰序。
對(duì)于char,默認(rèn)值是'\x0000'
對(duì)于float规哪,默認(rèn)值是0.0F
對(duì)于double菌羽,默認(rèn)值是0.0D
對(duì)于decimal,默認(rèn)值是0.0M
對(duì)于bool由缆,默認(rèn)值是false
對(duì)于一個(gè)枚舉類型,默認(rèn)值是0
對(duì)于一個(gè)結(jié)構(gòu)類型猾蒂,默認(rèn)值的設(shè)置就是把所有值類型的域都設(shè)置為它們各自的默認(rèn)值均唉,把所有的引用類型的域賦為空
1.1 簡(jiǎn)單類型
C#提供一套預(yù)定義的結(jié)構(gòu)類型叫做簡(jiǎn)單類型。簡(jiǎn)單類型用保留字定義肚菠,這些保留字僅僅是在System名字空間里預(yù)定義的結(jié)構(gòu)類型的化名舔箭。比如int是保留字,System蚊逢。Int32是在System名字空間中預(yù)定義類型层扶。一個(gè)簡(jiǎn)單類型和它化名的結(jié)構(gòu)類型是完全一樣的,也就是說寫int和寫System烙荷。Int32是一樣的镜会。簡(jiǎn)單類型主要有整型,浮點(diǎn)類型终抽,小數(shù)類型戳表,布爾類型桶至,字符型
1.1.1 整型
C#中支持9種整型:sbyte,byte匾旭,short镣屹,ushort,int价涝,uint女蜈,long,ulong和char色瘩。
Sbyte:代表有符號(hào)的8位整數(shù)伪窖,數(shù)值范圍從-128 ~ 127
Byte:代表無符號(hào)的8位整數(shù),數(shù)值范圍從0~255
Short:代表有符號(hào)的16位整數(shù)泞遗,范圍從-32768 ~ 32767
ushort:代表有符號(hào)的16位整數(shù)惰许,范圍從-32768 ~ 32767
Int:代表有符號(hào)的32位整數(shù),范圍從-2147483648 ~ 2147483648
uint:代表無符號(hào)的32位整數(shù)史辙,范圍從0 ~ 4294967295
Long:代表有符號(hào)的64位整數(shù)汹买,范圍從-9223372036854775808 ~ 9223372036854775808
Ulong:代表無符號(hào)的64位整數(shù),范圍從0 ~ 18446744073709551615聊倔。
char:代表無符號(hào)的16位整數(shù)晦毙,數(shù)值范圍從0~65535。
Char類型的可能值對(duì)應(yīng)于統(tǒng)一字符編碼標(biāo)準(zhǔn)(Unicode)的字符集耙蔑。
Char類型與其他整數(shù)類型相比有以下兩點(diǎn)不同之處:
a见妒,沒有其他類型到char類型的隱式轉(zhuǎn)換。即使是對(duì)于sbyte甸陌,byte和ushort這樣能完全使用char類型代表其值的類型须揣, sbyte,byte和ushort到char的隱式轉(zhuǎn)換也不存在钱豁。
b耻卡,char類型的常量必須被寫為字符形式,如果用整數(shù)形式牲尺,則必須帶有類型轉(zhuǎn)換前綴卵酪。比如(char)10賦值形式有三種:
char chsomechar="A";
char chsomechar="\x0065"; 十六進(jìn)制
char chsomechar="\u0065 ; unicode表示法
字符型中有下列轉(zhuǎn)義符:
1,'用來表示單引號(hào)
2谤碳,"用來表示雙引號(hào)
3溃卡,\ 用來表示反斜杠
4, \0 表示空字符
5蜒简, \a 用來表示感嘆號(hào)
6瘸羡, \b 用來表示退格
7, \f 用來表示換頁
8搓茬, \n 用來表示換行
9最铁, \r 用來表示回車
10讯赏, \t 用來表示水平tab
11, \v 用來表示垂直tab
1.1.2 浮點(diǎn)類型
C#支持兩種浮點(diǎn)類型:float和double冷尉。
Float型所能表示的值的范圍大約可以從1.510 -45~3.4 10 38漱挎,精確到小數(shù)點(diǎn)后面7位。
Double型所能表示的值的范圍大約可以從5.010 -324~1.7 10 308雀哨,精確到小數(shù)點(diǎn)后面15位或16位磕谅。
如果二元操作中的其中一個(gè)操作數(shù)為浮點(diǎn)類型,那么另外一個(gè)操作數(shù)是整型或浮點(diǎn)類型雾棺,運(yùn)算規(guī)則如下:
a膊夹,如果其中一個(gè)操作數(shù)是整型,則操作數(shù)被轉(zhuǎn)換為另一個(gè)操作數(shù)的浮點(diǎn)數(shù)類型;
b捌浩,如果操作數(shù)之一為double放刨,則另一操作數(shù)也被轉(zhuǎn)換成double類型,運(yùn)算以double類型的精度和取值范圍進(jìn)行尸饺,并且所得結(jié)果也為double類型;
c进统,否則,運(yùn)算至少將以float類型的取值范圍和精度進(jìn)行浪听,并且所得結(jié)果也為float型螟碎。
1.1.3 小數(shù)(decimal)類型
小數(shù)類型非常適用于金融和貨幣運(yùn)算。數(shù)值范圍從1.010 -28~7.9 10 28迹栓,精確到小數(shù)點(diǎn)后面28位掉分。如果二元操作中的其中一個(gè)操作數(shù)是小數(shù)類型,那么另外一個(gè)從操作數(shù)是整型或小數(shù)類型克伊。整型在運(yùn)算前被轉(zhuǎn)化為小數(shù)類型數(shù)酥郭。如果一個(gè)小數(shù)類型的算術(shù)運(yùn)算產(chǎn)生了一個(gè)對(duì)于小數(shù)類型的格式來說太小的值,操作的結(jié)果將會(huì)變成0愿吹。如果一個(gè)小數(shù)類型的算術(shù)運(yùn)算產(chǎn)生了一個(gè)對(duì)于小數(shù)類型的格式來說太大的值褥民,就會(huì)觸發(fā)溢出錯(cuò)誤。小數(shù)類型較浮點(diǎn)類型而言洗搂,具有更大的精確度,但是數(shù)值范圍相對(duì)小了很多载弄。將浮點(diǎn)類型的數(shù)向小數(shù)類型的數(shù)轉(zhuǎn)化時(shí)會(huì)產(chǎn)生溢出錯(cuò)誤耘拇,將小數(shù)類型的數(shù)向浮點(diǎn)類型的數(shù)轉(zhuǎn)化時(shí)會(huì)造成精確度的損失。因此宇攻,兩種類型不存在隱式或顯式轉(zhuǎn)換惫叛。布爾型:值為true或false。沒有標(biāo)準(zhǔn)能實(shí)現(xiàn)布爾類型和其他類型的轉(zhuǎn)換逞刷。
1.2 枚舉類型
枚舉類型的元素使用的類型只能是long嘉涌,int妻熊,short,byte仑最。默認(rèn)類型是int扔役。默認(rèn)第一個(gè)元素的值是0,每一個(gè)連續(xù)的元素按1遞增警医∫谛兀可以給元素直接賦值。如:
2. {
3. January=1预皇,
4. February侈玄,
5. march=31
6. };
7. 可以強(qiáng)制定義其他類型,如:
8. enum monthnames : byte
9. { January 吟温,
10. February序仙,
11. March
12. };
1.3結(jié)構(gòu)類型 結(jié)構(gòu)類型也是一種值類型,使用它的目的是用于創(chuàng)建小型的對(duì)象鲁豪,用以節(jié)省內(nèi)存潘悼。下面的例子表示一個(gè)使用byte類型的4個(gè)字段的IP地址。
1. using System;
2. Struct IP //聲明結(jié)構(gòu)
3. {
4. public byte b1呈昔,b2挥等,b3,b4;
5. }
7. Class test
8. {
9. public static void Main()
10. {
11. IP myIP;
12. myIP.b1=192;
13. myIP.b2=168;
14. myIP.b3=1;
15. myIP.b4=101;
16. Console.Write("{0}.{1}堤尾。"肝劲, myIP.b1, myIP.b2);
17. Console.Write("{0}.{1}"郭宝, myIP.b3辞槐, myIP.b4);
18. }
19. }
2 引用類型
引用類型包括類類型,接口類型粘室,代表類型和數(shù)組類型榄檬。
2.1 類類型
類 類型定義了一種數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)中包含了數(shù)據(jù)成員(如常量衔统,字段和事件等)鹿榜,函數(shù)成員(如方法,屬性锦爵,索引舱殿,操作,構(gòu)造函數(shù)和析構(gòu)函數(shù)等)和嵌套 類型险掀。支持繼承沪袭。
2.2 對(duì)象類型
對(duì)象類型是其他所有類型最終的基礎(chǔ)類型。在C#中每一種類型都直接或者間接的源于object這個(gè)類類型樟氢。
2.3 字符串類型
字符串類型是直接從object中繼承而來的密封類冈绊。String類型的值可以寫成字符串文字的形式侠鳄。
2.4 接口類型
一個(gè)接口聲明一個(gè)只有抽象成員的引用類型,接口僅僅存在方法標(biāo)志死宣,但沒有執(zhí)行代碼伟恶。當(dāng)定義一個(gè)類時(shí),如果類從接口派生十电,可以派生自多重接口;但是如果類從類派生知押,就只能從一個(gè)類派生。
聲明方法如例:
1. interface iface
2. {
3. void showmyface();
4. }
2.5 代表類型
代表引用一種靜態(tài)的方法或者對(duì)象實(shí)例鹃骂,引用該對(duì)象的實(shí)例方法台盯。與其接近的是c/c++中的指針,但指針只能訪問靜態(tài)的函數(shù)畏线,代表既能訪問靜態(tài)的方法静盅,也能訪問實(shí)例的方法。
2.6 數(shù)組
數(shù)組是包含一串變量的數(shù)據(jù)結(jié)構(gòu)寝殴。數(shù)組變量也稱做數(shù)組元素蒿叠,它們具有相同的類型,這種類型也稱做數(shù)組元素類型蚣常。數(shù)組的元素類型可以是任何類型市咽,包括數(shù)組類型。數(shù)組用下標(biāo)確定每一個(gè)數(shù)組元素的索引號(hào)抵蚊。只有一個(gè)下標(biāo)的數(shù)組稱為一維數(shù)組施绎,多于一個(gè)下標(biāo)的數(shù)組稱為
多維數(shù)組。
例:int[] a={0贞绳,2谷醉,4,6冈闭,8}; 等價(jià)于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型的一維數(shù)組
int[,] a; //int型的二維數(shù)組
int[耍休,刃永,] a; //int型的三維數(shù)組
int[] []a; //int型的數(shù)組的數(shù)組
int[][][]a; //int型的數(shù)組的數(shù)組的數(shù)組
數(shù)組的每個(gè)維數(shù)的長(zhǎng)度不是數(shù)組類型的一部分,維數(shù)的長(zhǎng)度是在數(shù)組創(chuàng)建語句中指定的羹应,而不是在數(shù)組類型中
指定的,例如:
int[次屠,园匹,] a3=new int[10雳刺,20,30];
a3是是一個(gè)數(shù)組變量裸违, int[掖桦,,] 沒有指定數(shù)組的長(zhǎng)度供汛,數(shù)組創(chuàng)建語句new int[10枪汪,20,30]才指定怔昨。
下面的例子創(chuàng)建一個(gè)數(shù)組的數(shù)組:
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};