C#的數據類型

C# 類型體系包含下列3種類型:

3-1值類型-------------簡單值類型:數值類型、布爾類型、字符類型、自定義類型

? ? ? ? ? ? ? ? ?-------------復合值類型:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct結構{數值類型、布爾類型、自定義類型}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? enum枚舉

3-2引用類型--? ? ? ? ? class類

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?interface接口

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?delegate委托

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?- - -array數組

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?內置引用類型:(dynamic動態)、object對象、string字符串

3-3指針類型

C#的數據類型可以分為3類:數值類型,引用類型,指針類型。指針類型僅在不安全代碼中使用。

值類型包括簡單值類型和復合型類型。簡單值類型可以再細分為整數類型、字符類型、實數類型和布爾類型;而復合類型則是簡單類型的復合,包括結構(struct)類型和枚舉(enum)類型。

值類型包括簡單類型(如字符型,浮點型和整數型等),集合類型和結構型。引用類型包括類類型,接口類型,代表類型和數組類型。

值類型和引用類型的不同之處是值類型的變量值直接包含數據,而引用類型的變量把它們的引用存儲在對象中。對于引用類型的變量,完全有可能讓兩個不同的變量引用同一個對象,這樣一來,對其中一個變量的操作就會影響到被另一個變量引用的對象。對于值類型的變量而言,每一個變量有它們自己的數值,因此對其中一個變量的操作不可能影響到另外一個變量。

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

{

January=1,

February,

march=31

};

可以強制定義其他類型,如:

enum monthnames : byte

{January ,

February,

March

};

1.3結構類型

結構類型也是一種值類型,使用它的目的是用于創建小型的對象,用以節省內存。下面的例子表示一個使用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 引用類型

引用類型包括類類型,接口類型,代表類型和數組類型。

2.1 類類型

類 類型定義了一種數據結構,這個數據結構中包含了數據成員(如常量,字段和事件等),函數成員(如方法,屬性,索引,操作,構造函數和析構函數等)和嵌套 類型。支持繼承。

2.2 對象類型

對象類型是其他所有類型最終的基礎類型。在C#中每一種類型都直接或者間接的源于object這個類類型。

2.3 字符串類型

字符串類型是直接從object中繼承而來的密封類。String類型的值可以寫成字符串文字的形式。

2.4 接口類型

一個接口聲明一個只有抽象成員的引用類型,接口僅僅存在方法標志,但沒有執行代碼。當定義一個類時,如果類從接口派生,可以派生自多重接口;但是如果類從類派生,就只能從一個類派生。

聲明方法如例:

[html] view plain copy print?

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};

原文地址:http://www.cnblogs.com/villison/archive/2007/07/07/809766.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容