三、C#語(yǔ)言基礎(chǔ)
(一)數(shù)據(jù)類型
應(yīng)用程序總是要處理數(shù)據(jù)的,我們必須要讓計(jì)算機(jī)了解需要處理什么樣的數(shù)據(jù),用什么方式進(jìn)行處理,按什么格式保存數(shù)據(jù)等。這就需要了解程序設(shè)計(jì)語(yǔ)言的數(shù)據(jù)類型。
1.值類型
在學(xué)習(xí)各種類型以前,我們先提一下變量的概念,變量即是存儲(chǔ)信息的基本單元,另一方面,我們也可以把變量理解為計(jì)算機(jī)內(nèi)存中的一個(gè)存儲(chǔ)空間。C#的值類型可以分為:簡(jiǎn)單類型、結(jié)構(gòu)類型、枚舉類型。
簡(jiǎn)單類型是直接由一系列元素構(gòu)成的數(shù)據(jù)類型。C#中為我們提供了一組已定義的簡(jiǎn)單類型。這些簡(jiǎn)單類型可分為:整數(shù)類型、布爾類型、字符類型和實(shí)數(shù)類型。
(1)整數(shù)類型
整數(shù)類型的變量的值為整數(shù)。C#中有九種整數(shù)類型:短字節(jié)型(sbyte)、字節(jié)型(byte)、短整型(short)、無(wú)符號(hào)短整型(ushort)、整型(int)、無(wú)符號(hào)整型(uint)、長(zhǎng)整型(long)、無(wú)符號(hào)長(zhǎng)整型(ulong)。這些整型類型在數(shù)學(xué)上的表示以及在計(jì)算機(jī)中的取值范圍如下表所示。
(圖)
(2)布爾類型
布爾類型是用來(lái)表示一個(gè)事件或狀態(tài)的“真”和“假”。我們知道,不管任何數(shù)據(jù),在計(jì)算機(jī)的內(nèi)部都是采用二進(jìn)制方式處理和存儲(chǔ)。布爾類型表示的邏輯變量只有兩種取值:“真”或“假”,在C#中分別采用“true”和“false”表示。
(3)實(shí)數(shù)類型
浮點(diǎn)類型:數(shù)學(xué)中的實(shí)數(shù)不僅包括整數(shù),而且包括小數(shù)。小數(shù)在C#中采用單精度(float)和雙精度(double)。它們的差別在于取值范圍和精度不同。
單精度:取值范圍在(^60090201a)^到(圖)之間,精度為7位數(shù)。
雙精度:取值范圍在(圖)到(圖)之間,精度為15到16位數(shù)。
十進(jìn)制類型(decimal):是C#專門(mén)為我們定義的一種數(shù)據(jù)類型,主要用于方便我們?cè)诮鹑诤拓泿欧矫娴挠?jì)算。C#通過(guò)提供這種專門(mén)的數(shù)據(jù)類型,使我們能夠更快捷地設(shè)計(jì)這方面的應(yīng)用程序。其取值范圍從大約(圖)到(圖)的28到29位有效數(shù)字。
當(dāng)定義一個(gè)十進(jìn)制變量并賦值給它時(shí),使用m下標(biāo)以表明它是一個(gè)十進(jìn)制類型。如果省略了m下標(biāo),在變量被賦值之前,它將被編譯器當(dāng)作雙精度數(shù)據(jù)類型來(lái)處理。下面是一個(gè)合法的賦值:
decimal d_value=1.0m;
(4)字符類型
除了數(shù)字以外,計(jì)算機(jī)還需要處理的信息主要就是字符了。字符包括數(shù)字字符、英文字符、表達(dá)符號(hào)等,C#提供的字符類型采用了國(guó)際公認(rèn)的Unicode字符集標(biāo)準(zhǔn)。一個(gè)Unicode的標(biāo)準(zhǔn)字符長(zhǎng)度為16位,用它可以表示大多數(shù)的字符類型了。可以按下面的方法給一個(gè)字符變量賦值,如:
char c=′A′;
另外,我們還可以直接通過(guò)十六進(jìn)制轉(zhuǎn)義符(前綴\x)或Unicode表示法給字符型變量賦值)(前綴\u),用來(lái)在程序中指代特殊的控制字符。
(5)結(jié)構(gòu)類型
在具體的程序設(shè)計(jì)中我們經(jīng)常要把一組相關(guān)的信息存放在一起。把一系列相關(guān)的變量組織成為一個(gè)單一實(shí)體的過(guò)程,稱為生成結(jié)構(gòu)的過(guò)程。這個(gè)單一實(shí)體的類型我們就叫做結(jié)構(gòu)類型,每一個(gè)變量稱為結(jié)構(gòu)的成員。結(jié)構(gòu)類型的變量采用struct來(lái)進(jìn)行聲明。下面的程序代碼說(shuō)明定義一個(gè)通訊錄記錄結(jié)構(gòu)(包括姓名、電話和地址)的定義。
Struct PhoneBook{
public string name;
public string phone;
public string address;
}
PhoneBook p1;
p1就是一個(gè)通訊錄(PhoneBook)結(jié)構(gòu)類型的變量。上面聲明中的“public”表示對(duì)結(jié)構(gòu)類型的成員的訪問(wèn)權(quán)限。對(duì)結(jié)構(gòu)成員的訪問(wèn)通過(guò)結(jié)構(gòu)變量名加上訪問(wèn)符“.”號(hào),后跟成員的名稱:
p1.name=″tom″;
結(jié)構(gòu)類型包含的成員類型沒(méi)有限制,可以相同也可不同。
(6)枚舉類型
枚舉(enum)實(shí)際上是為一組在邏輯上密不可分的整數(shù)值提供便于記憶的符號(hào)。下面的程序代碼聲明了一個(gè)代表星期的枚舉類型的變量。
Enum WeekDay{
Sunday,Monday,Tuesday,Wednesday,Friday,Saturday
};
WeekDay day;
注意:枚舉類型的變量在某一時(shí)刻只能取枚舉中某一個(gè)元素的值。如,day這個(gè)表示“星期”的枚舉的變量,它的值要么是Sunday,要么是Monday或其他的星期元素,但它在一個(gè)時(shí)刻只能代表具體的某一天,不能既是星期二,又是星期三。
Day=Tuseday;
按照系統(tǒng)默認(rèn),枚舉中的每個(gè)元素都是整型(int),且第一個(gè)元素刪去的值為0,它后面的每一個(gè)連續(xù)的元素的值按加1遞增。在枚舉中,也可以給元素直接賦值。下面的程序代碼把星期一的值設(shè)為1,其后的元素的值分別為2,3……
enum WeekDay{
Sunday=1,Monday,Tuesday,Wednesday,Friday,Saturday
};
為枚舉類型的元素所賦值的值的類型限于long、int、short和byte等整數(shù)類型。
2.引用類型
在這里,引用的含義是該類型的變量不直接存儲(chǔ)所包含的值,而是指向它所要存儲(chǔ)的值。即引用類型存儲(chǔ)實(shí)際數(shù)據(jù)的引用值的地址。C#中的引用類型有四種:類、代表、數(shù)組和接口。
(1)類
類是面向?qū)ο缶幊痰幕締挝唬且环N包含數(shù)據(jù)成員、函數(shù)成員和嵌套類型的數(shù)據(jù)結(jié)構(gòu)。類的數(shù)據(jù)成員有常量、域和事件。函數(shù)成員包括方法、屬性、索引指示器、運(yùn)算符等。類和結(jié)構(gòu)同樣都包含了自己的成員,但它們之間最主要的區(qū)別在于:類是引用類型,而結(jié)構(gòu)是值類型。
類支持繼承機(jī)制,通過(guò)繼承,派生類可以擴(kuò)展基類的數(shù)據(jù)成員和函數(shù)成員,進(jìn)而達(dá)到代碼重用和設(shè)計(jì)重用的目的。下面介紹兩個(gè)經(jīng)常用到的類:
object類:它是所有其他類型的基類,C#中的所有類型都直接或是間接地從object類中繼承。因此,對(duì)一個(gè)object的變量可以賦予任何類型的值。
Int x=25;
object obj1;
obj1=x;
object obj2=′A′;
對(duì)object類型的變量聲明采用object關(guān)鍵字,這個(gè)關(guān)鍵字是在.NET平臺(tái)中為我們提供的預(yù)定義的名字空間System中定義的,是類System.Object的別名。
String類:專門(mén)用于對(duì)字符串的操作。同樣,這個(gè)類也是在.NET平臺(tái)中為我們提供的預(yù)定義的名字空間System中定義的,是類System.String的別名。
字符串在實(shí)際中應(yīng)用非常的廣泛,在類的定義中封裝了許多內(nèi)部的操作,我們只要簡(jiǎn)單地加以利用就可以了。可以用加號(hào)“+”合并兩個(gè)字符串,采用下標(biāo)從字符串中獲取字符等。
String String1=″Welcome″;
string String2=″Welcome″+″e(cuò)veryone″;
char c=String1[0];
bool b=(String1==String2);
(2)代表
在C#中取消了C和C++中的指針的這個(gè)概念。而代表實(shí)際上相當(dāng)于是C#中的函數(shù)指針原型,與指針不同的是,代表在C#中是類型安全的。
在聲明代表時(shí),只需要指定代表指向的原型的類型,它不能有返回值,也不能帶有輸出類型的參數(shù)。如我們可以聲明一個(gè)指向int類型函數(shù)原型的代表:
delegate int MyDelegate();
如果我們聲明了自己的一個(gè)代表,那么它就是對(duì)系統(tǒng)定義的類System.deldgate的一個(gè)擴(kuò)展。
(3)數(shù)組
在進(jìn)行批量處理數(shù)據(jù)的時(shí)候,我們要用到數(shù)組。數(shù)組是一組類型相同的有序數(shù)據(jù)。數(shù)組按照數(shù)組名、數(shù)據(jù)元素的類型和維數(shù)來(lái)進(jìn)行描述。C#中提供Ststem.Array類是所有數(shù)組類型的基類。
數(shù)組的聲明格式為:
non-array-type[dim-separators] array-instance name;
比如我們聲明一個(gè)整數(shù)數(shù)組:
int[]arr;
在定義數(shù)組時(shí),可以預(yù)先指定數(shù)組元素的個(gè)數(shù),這時(shí)在“[]”中定義數(shù)組的元素個(gè)數(shù),它的個(gè)數(shù)可以通過(guò)數(shù)組名加圓點(diǎn)加“Length”獲得。而在使用數(shù)組時(shí),可以在“[]”中加入下標(biāo)來(lái)取得對(duì)應(yīng)的數(shù)組元素。C#中的數(shù)組元素的下標(biāo)是從0開(kāi)始的,以后遞增。
在C#中數(shù)組可以是一維的也可以是多維的,同樣也支持矩陣和參差不齊的數(shù)組。其中一維數(shù)組最為普遍,用得也最多。
Class Tese
{
static void Main(){ //可動(dòng)態(tài)生成數(shù)組的長(zhǎng)度
string[] a1; //一維數(shù)組string
string[] a2; //二維數(shù)組string
string[] a3; //三維數(shù)組string
}
}
(4)接口
接口定義了一個(gè)協(xié)議(conrtact)。一個(gè)類或結(jié)構(gòu)要實(shí)現(xiàn)接口就必須堅(jiān)持這種協(xié)議。接口可以包括方法、屬性、索引和事件作為成員。下面的程序代碼說(shuō)明了一個(gè)接口,它包含一個(gè)索引、一個(gè)事件E、一個(gè)方法F和一個(gè)屬性P。
Interface Iexampie
{
string this[int index]{get; ste;}\
event EventHandler E;
void F(int value);
string P{get; set;}
}