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