C# 類型體系包含下列3種類型:
3-1值類型-------------簡單值類型:數(shù)值類型、布爾類型择示、字符類型、自定義類型
? ? ? ? ? ? ? ? ?-------------復合值類型:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct結構{數(shù)值類型、布爾類型、自定義類型}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? enum枚舉
3-2引用類型--? ? ? ? ? class類
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?interface接口
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?delegate委托
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?- - -array數(shù)組
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?內置引用類型:(dynamic動態(tài))腾啥、object對象、string字符串
3-3指針類型
C#的數(shù)據(jù)類型可以分為3類:數(shù)值類型,引用類型倘待,指針類型疮跑。指針類型僅在不安全代碼中使用。
值類型包括簡單值類型和復合型類型凸舵。簡單值類型可以再細分為整數(shù)類型祖娘、字符類型、實數(shù)類型和布爾類型啊奄;而復合類型則是簡單類型的復合渐苏,包括結構(struct)類型和枚舉(enum)類型。
值類型包括簡單類型(如字符型菇夸,浮點型和整數(shù)型等)琼富,集合類型和結構型。引用類型包括類類型庄新,接口類型鞠眉,代表類型和數(shù)組類型。
值類型和引用類型的不同之處是值類型的變量值直接包含數(shù)據(jù)择诈,而引用類型的變量把它們的引用存儲在對象中械蹋。對于引用類型的變量,完全有可能讓兩個不同的變量引用同一個對象羞芍,這樣一來哗戈,對其中一個變量的操作就會影響到被另一個變量引用的對象。對于值類型的變量而言荷科,每一個變量有它們自己的數(shù)值唯咬,因此對其中一個變量的操作不可能影響到另外一個變量。
1 值類型
所有的值類型都隱含地聲明了一個公共的無參數(shù)的構造函數(shù)步做,這個構造函數(shù)叫做默認構造函數(shù)副渴。默認構造函數(shù)返回一個初始為零的值類型的實例,稱之為默認值全度。
對于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是一樣的。簡單類型主要有整型景东,浮點類型砂轻,小數(shù)類型,布爾類型斤吐,字符型
1.1.1 整型
C#中支持9種整型:sbyte搔涝,byte,short和措,ushort庄呈,int,uint派阱,long诬留,ulong和char。
Sbyte:代表有符號的8位整數(shù)贫母,數(shù)值范圍從-128 ~ 127
Byte:代表無符號的8位整數(shù)文兑,數(shù)值范圍從0~255
Short:代表有符號的16位整數(shù),范圍從-32768 ~ 32767
ushort:代表有符號的16位整數(shù)腺劣,范圍從-32768 ~ 32767
Int:代表有符號的32位整數(shù)绿贞,范圍從-2147483648 ~ 2147483648
uint:代表無符號的32位整數(shù),范圍從0 ~ 4294967295
Long:代表有符號的64位整數(shù)橘原,范圍從-9223372036854775808 ~ 9223372036854775808
Ulong:代表無符號的64位整數(shù)籍铁,范圍從0 ~ 18446744073709551615涡上。
char:代表無符號的16位整數(shù)歌懒,數(shù)值范圍從0~65535衙耕。
Char類型的可能值對應于統(tǒng)一字符編碼標準(Unicode)的字符集。
Char類型與其他整數(shù)類型相比有以下兩點不同之處:
a失晴,沒有其他類型到char類型的隱式轉換靡狞。即使是對于sbyte耻警,byte和ushort這樣能完全使用char類型代表其值的類型, sbyte甸怕,byte和ushort到char的隱式轉換也不存在甘穿。
b,char類型的常量必須被寫為字符形式梢杭,如果用整數(shù)形式温兼,則必須帶有類型轉換前綴。比如(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李命,精確到小數(shù)點后面7位登淘。
Double型所能表示的值的范圍大約可以從5.0*10 -324~1.7* 10 308,精確到小數(shù)點后面15位或16位封字。
如果二元操作中的其中一個操作數(shù)為浮點類型黔州,那么另外一個操作數(shù)是整型或浮點類型,運算規(guī)則如下:
a周叮,如果其中一個操作數(shù)是整型辩撑,則操作數(shù)被轉換為另一個操作數(shù)的浮點數(shù)類型;
b,如果操作數(shù)之一為double仿耽,則另一操作數(shù)也被轉換成double類型合冀,運算以double類型的精度和取值范圍進行,并且所得結果也為double類型;
c项贺,否則君躺,運算至少將以float類型的取值范圍和精度進行峭判,并且所得結果也為float型。
1.1.3 小數(shù)(decimal)類型
小數(shù)類型非常適用于金融和貨幣運算棕叫。數(shù)值范圍從1.0*10 -28~7.9* 10 28林螃,精確到小數(shù)點后面28位。如果二元操作中的其中一個操作數(shù)是小數(shù)類型俺泣,那么另外一個從操作數(shù)是整型或小數(shù)類型疗认。整型在運算前被轉化為小數(shù)類型數(shù)。如果一個小數(shù)類型的算術運算產(chǎn)生了一個對于小數(shù)類型的格式來說太小的值伏钠,操作的結果將會變成0横漏。如果一個小數(shù)類型的算術運算產(chǎn)生了一個對于小數(shù)類型的格式來說太大的值,就會觸發(fā)溢出錯誤熟掂。小數(shù)類型較浮點類型而言缎浇,具有更大的精確度,但是數(shù)值范圍相對小了很多赴肚。將浮點類型的數(shù)向小數(shù)類型的數(shù)轉化時會產(chǎn)生溢出錯誤素跺,將小數(shù)類型的數(shù)向浮點類型的數(shù)轉化時會造成精確度的損失。因此誉券,兩種類型不存在隱式或顯式轉換指厌。布爾型:值為true或false。沒有標準能實現(xiàn)布爾類型和其他類型的轉換踊跟。
1.2 枚舉類型
枚舉類型的元素使用的類型只能是long仑乌,int,short琴锭,byte。默認類型是int衙传。默認第一個元素的值是0决帖,每一個連續(xù)的元素按1遞增”痛罚可以給元素直接賦值地回。如:
[csharp] view plain copy print?
enum monthnames
{
January=1,
February俊鱼,
march=31
};
可以強制定義其他類型刻像,如:
enum monthnames : byte
{January ,
February并闲,
March
};
1.3結構類型
結構類型也是一種值類型细睡,使用它的目的是用于創(chuàng)建小型的對象,用以節(jié)省內存帝火。下面的例子表示一個使用byte類型的4個字段的IP地址溜徙。
[csharp] view plain copy print?
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 引用類型
引用類型包括類類型疏日,接口類型偿洁,代表類型和數(shù)組類型。
2.1 類類型
類 類型定義了一種數(shù)據(jù)結構制恍,這個數(shù)據(jù)結構中包含了數(shù)據(jù)成員(如常量父能,字段和事件等),函數(shù)成員(如方法净神,屬性何吝,索引,操作鹃唯,構造函數(shù)和析構函數(shù)等)和嵌套 類型爱榕。支持繼承。
2.2 對象類型
對象類型是其他所有類型最終的基礎類型坡慌。在C#中每一種類型都直接或者間接的源于object這個類類型黔酥。
2.3 字符串類型
字符串類型是直接從object中繼承而來的密封類。String類型的值可以寫成字符串文字的形式洪橘。
2.4 接口類型
一個接口聲明一個只有抽象成員的引用類型跪者,接口僅僅存在方法標志,但沒有執(zhí)行代碼熄求。當定義一個類時渣玲,如果類從接口派生,可以派生自多重接口;但是如果類從類派生弟晚,就只能從一個類派生忘衍。
聲明方法如例:
[html] view plain copy print?
interface iface
{
void showmyface();
}
2.5 代表類型
代表引用一種靜態(tài)的方法或者對象實例,引用該對象的實例方法卿城。與其接近的是c/c++中的指針枚钓,但指針只能訪問靜態(tài)的函數(shù),代表既能訪問靜態(tài)的方法瑟押,也能訪問實例的方法搀捷。
2.6 數(shù)組
數(shù)組是包含一串變量的數(shù)據(jù)結構。數(shù)組變量也稱做數(shù)組元素勉耀,它們具有相同的類型指煎,這種類型也稱做數(shù)組元素類型蹋偏。數(shù)組的元素類型可以是任何類型,包括數(shù)組類型至壤。數(shù)組用下標確定每一個數(shù)組元素的索引號威始。只有一個下標的數(shù)組稱為一維數(shù)組,多于一個下標的數(shù)組稱為
多維數(shù)組像街。
例: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型的一維數(shù)組
int[吗讶,] a; //int型的二維數(shù)組
int[燎猛,,] a; //int型的三維數(shù)組
int[] []a; //int型的數(shù)組的數(shù)組
int[][][]a; //int型的數(shù)組的數(shù)組的數(shù)組
數(shù)組的每個維數(shù)的長度不是數(shù)組類型的一部分照皆,維數(shù)的長度是在數(shù)組創(chuàng)建語句中指定的重绷,而不是在數(shù)組類型中
指定的,例如:
int[膜毁,昭卓,] a3=new int[10,20瘟滨,30];
a3是是一個數(shù)組變量候醒, int[,杂瘸,] 沒有指定數(shù)組的長度火焰,數(shù)組創(chuàng)建語句new int[10,20胧沫,30]才指定。
下面的例子創(chuàng)建一個數(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};
原文地址:http://www.cnblogs.com/villison/archive/2007/07/07/809766.html