C#基礎教程Word版_第1頁
C#基礎教程Word版_第2頁
C#基礎教程Word版_第3頁
C#基礎教程Word版_第4頁
C#基礎教程Word版_第5頁
已閱讀5頁,還剩522頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C#基礎教程第一章 C#語言基礎本章介紹C#語言的基礎知識,希望具有C語言的讀者能夠基本掌握C#語言,并以此為基礎,能夠進一步學習用C#語言編寫window應用程序和Web應用程序。當然僅靠一章的內容就完全掌握C#語言是不可能的,如需進一步學習C#語言,還需要認真閱讀有關C#語言的專著。1.1 C#語言特點Microsoft.NET(以下簡稱.NET)框架是微軟提出的新一代Web軟件開發(fā)模型,C#語言是.NET框架中新一代的開發(fā)工具。C#語言是一種現(xiàn)代、面向對象的語言,它簡化了C+語言在類、命名空間、方法重載和異常處理等方面的操作,它摒棄了C+的復雜性,更易使用,更少出錯。它使用組件編程,和V

2、B一樣容易使用。C#語法和C+和JAVA語法非常相似,如果讀者用過C+和JAVA,學習C#語言應是比較輕松的。用C#語言編寫的源程序,必須用C#語言編譯器將C#源程序編譯為中間語言(MicroSoft Intermediate Language,MSIL)代碼,形成擴展名為exe或dll文件。中間語言代碼不是CPU可執(zhí)行的機器碼,在程序運行時,必須由通用語言運行環(huán)境(Common Language Runtime,CLR)中的既時編譯器(JUST IN Time,JIT)將中間語言代碼翻譯為CPU可執(zhí)行的機器碼,由CPU執(zhí)行。CLR為C#語言中間語言代碼運行提供了一種運行時環(huán)境,C#語言的CL

3、R和JAVA語言的虛擬機類似。這種執(zhí)行方法使運行速度變慢,但帶來其它一些好處,主要有:l 通用語言規(guī)范(Common Language Specification,CLS):.NET系統(tǒng)包括如下語言:C#、C+、VB、J#1 / 527,他們都遵守通用語言規(guī)范。任何遵守通用語言規(guī)范的語言源程序,都可編譯為相同的中間語言代碼,由CLR負責執(zhí)行。只要為其它操作系統(tǒng)編制相應的CLR,中間語言代碼也可在其它系統(tǒng)中運行。l 自動內存管理:CLR內建垃圾收集器,當變量實例的生命周期結束時,垃圾收集器負責收回不被使用的實例占用的內存空間。不必象C和C+語言,用語句在堆中建立的實例,必須用語句釋放實例占用的內

4、存空間。也就是說,CLR具有自動內存管理功能。l 交叉語言處理:由于任何遵守通用語言規(guī)范的語言源程序,都可編譯為相同的中間語言代碼,不同語言設計的組件,可以互相通用,可以從其它語言定義的類派生出本語言的新類。由于中間語言代碼由CLR負責執(zhí)行,因此異常處理方法是一致的,這在調試一種語言調用另一種語言的子程序時,顯得特別方便。l 增加安全:C#語言不支持指針,一切對內存的訪問都必須通過對象的引用變量來實現(xiàn),只允許訪問內存中允許訪問的部分,這就防止病毒程序使用非法指針訪問私有成員。也避免指針的誤操作產生的錯誤。CLR執(zhí)行中間語言代碼前,要對中間語言代碼的安全性,完整性進行驗證,防止病毒對中間語言代碼

5、的修改。l 版本支持:系統(tǒng)中的組件或動態(tài)聯(lián)接庫可能要升級,由于這些組件或動態(tài)聯(lián)接庫都要在注冊表中注冊,由此可能帶來一系列問題,例如,安裝新程序時自動安裝新組件替換舊組件,有可能使某些必須使用舊組件才可以運行的程序,使用新組件運行不了。在.NET中這些組件或動態(tài)聯(lián)接庫不必在注冊表中注冊,每個程序都可以使用自帶的組件或動態(tài)聯(lián)接庫,只要把這些組件或動態(tài)聯(lián)接庫放到運行程序所在文件夾的子文件夾bin中,運行程序就自動使用在bin文件夾中的組件或動態(tài)聯(lián)接庫。由于不需要在注冊表中注冊,軟件的安裝也變得容易了,一般將運行程序及庫文件拷貝到指定文件夾中就可以了。l 完全面向對象:不象C+語言,即支持面向過程程序

6、設計,又支持面向對象程序設計,C#語言是完全面向對象的,在C#中不再存在全局函數(shù)、全局變量,所有的函數(shù)、變量和常量都必須定義在類中,避免了命名沖突。C#語言不支持多重繼承。1.2 編寫控制臺應用程序 使用SDK命令行工具編寫控制臺程序第一個程序總是非常簡單的,程序首先讓用戶通過鍵盤輸入自己的名字,然后程序在屏幕上打印一條歡迎信息。程序的代碼是這樣的:using System;/導入命名空間。/為C#語言新增解釋方法,解釋到本行結束class Welcome/類定義,類的概念見下一節(jié) /*解釋開始,和C語言解釋用法相同解釋結束*/static void Main()/主程序,程序入口函數(shù),必須在

7、一個類中定義 Console.WriteLine("請鍵入你的姓名:");/控制臺輸出字符串Console.ReadLine();/從鍵盤讀入數(shù)據(jù),輸入回車結束Console.WriteLine("歡迎!");可以用任意一種文本編輯軟件完成上述代碼的編寫,然后把文件存盤,假設文件名叫做welcome.cs,C#源文件是以cs作為文件的擴展名。和C語言相同,C#語言是區(qū)分大小寫的。高級語言總是依賴于許多在程序外部預定義的變量和函數(shù)。在C或C+中這些定義一般放到頭文件中,用#include語句來導入這個頭文件。而在C#語言中使用using語句導入名字空間,u

8、sing System語句意義是導入System名字空間,C#中的using語句的用途與C+中#include語句的用途基本類似,用于導入預定義的變量和函數(shù),這樣在自己的程序中就可以自由地使用這些變量和函數(shù)。如果沒有導入名字空間的話我們該怎么辦呢?程序還能保持正確嗎?答案是肯定的,那樣的話我們就必須把代碼改寫成下面的樣子:class Welcome static void Main() System.Console.WriteLine("請鍵入你的姓名:");System.Console.ReadLine();System.Console.WriteLine("歡

9、迎!");也就是在每個Console前加上一個前綴System.,這個小原點表示Console是作為System的成員而存在的。C#中拋棄了C和C+中繁雜且極易出錯的操作符象:和->等,C#中的復合名字一律通過.來連接。System是.Net平臺框架提供的最基本的名字空間之一,有關名字空間的詳細使用方法將在以后詳細介紹,這里只要學會怎樣導入名字空間就足夠了。程序的第二行class Welcome聲明了一個類,類的名字叫做Welcome。C#程序中每個變量或函數(shù)都必須屬于一個類,包括主函數(shù)Main(),不能象C或C+那樣建立全局變量。C#語言程序總是從Main()方法開始執(zhí)行,一

10、個程序中不允許出現(xiàn)兩個或兩個以上的Main()方法。請牢記C#中Main()方法必須被包含在一個類中,Main第一個字母必須大寫,必須是一個靜態(tài)方法,也就是Main()方法必須使用static修飾。static void Main()是類Welcome中定義的主函數(shù)。靜態(tài)方法意義見以后章節(jié)。程序所完成的輸入輸出功能是通過Console類來完成的,Console是在名字空間System中已經定義好的一個類。Console類有兩個最基本的方法WriteLine和ReadLine。ReadLine表示從輸入設備輸入數(shù)據(jù),WriteLine則用于在輸出設備上輸出數(shù)據(jù)。如果在電腦上安裝了Visual S

11、tudio.Net,則可以在集成開發(fā)環(huán)境中直接選擇快捷鍵或菜單命令編譯并執(zhí)行源文件。如果您不具備這個條件,那么至少需要安裝Microsoft.Net Framework SDK,這樣才能夠運行C#語言程序。Microsoft.Net Framework SDK中內置了C#的編譯器csc.exe,下面讓我們使用這個微軟提供的命令行編譯器對程序welcome.cs進行編譯。假設已經將welcome.cs文件保存在d:Charp目錄下,啟動命令行提示符,在屏幕上輸入一行命令:d:回車,cd Charp回車,鍵入命令:C:WINNTMicrosoft.NETFrameworkv1.0.3705csc

12、welcome.cs如果一切正常welcome.cs文件將被編譯,編譯后生成可執(zhí)行文件Welcome.exe??梢栽诿钐崾痉翱谶\行可執(zhí)行文件Welcome.exe,屏幕上出現(xiàn)一行字符提示您輸入姓名:請鍵入你的姓名:輸入任意字符并按下回車鍵,屏幕將打印出歡迎信息:歡迎!注意,和我們使用過的絕大多數(shù)編譯器不同,在C#中編譯器只執(zhí)行編譯這個過程,而在C和C+中要經過編譯和鏈接兩個階段。換而言之C#源文件并不被編譯為目標文件.obj,而是直接生成可執(zhí)行文件.exe或動態(tài)鏈接庫.dll,C#編譯器中不需要包含鏈接器。 使用Visual Studio.Net建立控制臺程序(1) 運行Visual St

13、udio.Net程序,出現(xiàn)如圖1.2.2A界面。(2) 單擊新建項目按鈕,出現(xiàn)如圖1.2.2B對話框。在項目類型(P)編輯框中選擇Visual C#項目,在模板(T)編輯框中選擇控制臺應用程序,在名稱(N)編輯框中鍵入e1,在位置(L)編輯框中鍵入D:csarp,必須預先創(chuàng)建文件夾D:csarp。也可以單擊瀏覽按鈕,在打開文件對話框中選擇文件夾。單擊確定按鈕,創(chuàng)建項目。出現(xiàn)如圖1.2.2C界面。編寫一個應用程序,可能包含多個文件,才能生成可執(zhí)行文件,所有這些文件的集合叫做一個項目。(3) 修改class1.cs文件如下,有陰影部分是新增加的語句,其余是集成環(huán)境自動生成的。using Syste

14、m;namespace e1 / <summary> / Class1 的摘要說明。 / </summary> class Class1 / <summary> / 應用程序的主入口點。 / </summary> STAThread static void Main(string args) / / TODO: 在此處添加代碼以啟動應用程序 / Console.WriteLine("請鍵入你的姓名:"); Console.ReadLine(); Console.WriteLine("歡迎!"); (4) 按

15、CTRL+F5鍵,運行程序,如右圖,和1.2.1節(jié)運行效果相同。屏幕上出現(xiàn)一行字符,提示您輸入姓名:請鍵入你的姓名:輸入任意字符并按下回車鍵,屏幕將打印出歡迎信息:歡迎!輸入回車退出程序。 圖1.2.2A 圖1.2.2B 1.3 類的基本概念C#語言是一種現(xiàn)代、面向對象的語言。面向對象程序設計方法提出了一個全新的概念:類,它的主要思想是將數(shù)據(jù)(數(shù)據(jù)成員)及處理這些數(shù)據(jù)的相應方法(函數(shù)成員)封裝到類中,類的實例則稱為對象。這就是我們常說的封裝性。 類的基本概念類可以認為是對結構的擴充,它和C中的結構最大的不同是:類中不但可以包括數(shù)據(jù),還包括處理這些數(shù)據(jù)的函數(shù)。類是對數(shù)據(jù)和處理數(shù)據(jù)的方法(函數(shù))的

16、封裝。類是對某一類具有相同特性和行為的事物的描述。例如,定義一個描述個人情況的類Person如下:using System;class Person/類的定義,class是保留字,表示定義一個類,Person是類名 private string name="張三"/類的數(shù)據(jù)成員聲明private int age=12;/private表示私有數(shù)據(jù)成員public void Display()/類的方法(函數(shù))聲明,顯示姓名和年齡 Console.WriteLine("姓名:0,年齡:1",name,age);public void SetName(str

17、ing PersonName)/修改姓名的方法(函數(shù)) name=PersonName;public void SetAge(int PersonAge) age=PersonAge;Console.WriteLine("姓名:0,年齡:1",name,age)的意義是將第二個參數(shù)變量name變?yōu)樽址畹?位置,將第三個參數(shù)變量age變?yōu)樽址畹?位置,將第一個參數(shù)表示的字符串在顯示器上輸出。大家注意,這里我們實際定義了一個新的數(shù)據(jù)類型,為用戶自己定義的數(shù)據(jù)類型,是對個人的特性和行為的描述,他的類型名為Person,和int,char等一樣為一種數(shù)據(jù)類型。用定義新數(shù)據(jù)類

18、型Person類的方法把數(shù)據(jù)和處理數(shù)據(jù)的函數(shù)封裝起來。類的聲明格式如下:屬性 類修飾符 class 類名類體其中,關鍵字class、類名和類體是必須的,其它項是可選項。類修飾符包括new、public、protected、internal、private、abstract和sealed,這些類修飾符以后介紹。類體用于定義類的成員。1.3.2 類成員的存取控制一般希望類中一些數(shù)據(jù)不被隨意修改,只能按指定方法修改,既隱蔽一些數(shù)據(jù)。同樣一些函數(shù)也不希望被其它類程序調用,只能在類內部使用。如何解決這個問題呢?可用訪問權限控制字,常用的訪問權限控制字如下:private(私有),public(公有)。在

19、數(shù)據(jù)成員或函數(shù)成員前增加訪問權限控制字,可以指定該數(shù)據(jù)成員或函數(shù)成員的訪問權限。私有數(shù)據(jù)成員只能被類內部的函數(shù)使用和修改,私有函數(shù)成員只能被類內部的其它函數(shù)調用。類的公有函數(shù)成員可以被類的外部程序調用,類的公有數(shù)據(jù)成員可以被類的外部程序直接使用修改。公有函數(shù)實際是一個類和外部通訊的接口,外部函數(shù)通過調用公有函數(shù),按照預先設定好的方法修改類的私有成員。對于上述例子,name和age是私有數(shù)據(jù)成員,只能通過公有函數(shù)SetName()和SetAge()修改,既它們只能按指定方法修改。這里再一次解釋一下封裝,它有兩個意義,第一是把數(shù)據(jù)和處理數(shù)據(jù)的方法同時定義在類中。第二是用訪問權限控制字使數(shù)據(jù)隱蔽。1

20、.3.3 類的對象Person類僅是一個用戶新定義的數(shù)據(jù)類型,由它可以生成Person類的實例,C#語言叫對象。用如下方法聲明類的對象:Person OnePerson=new Person();此語句的意義是建立Person類對象,返回對象地址賦值給Person類變量OnePerson。也可以分兩步創(chuàng)建Person類的對象:Person OnePerson;OnePerson=new Person();OnePerson雖然存儲的是Person類對象地址,但不是C中的指針,不能象指針那樣可以進行加減運算,也不能轉換為其它類型地址,它是引用型變量,只能引用(代表)Person對象,具體意義參見

21、以后章節(jié)。和C、C+不同,C#只能用此種方法生成類對象。在程序中,可以用OnePerson.方法名或OnePerson.數(shù)據(jù)成員名訪問對象的成員。例如:OnePerson.Display(),公用數(shù)據(jù)成員也可以這樣訪問。注意,C#語言中不包括C+語言中的->符號。1.3.4 類的構造函數(shù)和析構函數(shù)在建立類的對象時,需做一些初始化工作,例如對數(shù)據(jù)成員初始化。這些可以用構造函數(shù)來完成。每當用new生成類的對象時,自動調用類的構造函數(shù)。終于明白了1 因此,可以把初始化的工作放到構造函數(shù)中完成。構造函數(shù)和類名相同,沒有返回值。例如可以定義Person類的構造函數(shù)如下:public Person(

22、string Name,int Age)/類的構造函數(shù),函數(shù)名和類同名,無返回值。 name=Name;age=Age;當用Person OnePerson=new Person(“張五”,20)語句生成Person類對象時,將自動調用以上構造函數(shù)。請注意如何把參數(shù)傳遞給構造函數(shù)。變量和類的對象都有生命周期,生命周期結束,這些變量和對象就要被撤銷。類的對象被撤銷時,將自動調用析構函數(shù)。一些善后工作可放在析構函數(shù)中完成。析構函數(shù)的名字為類名,無返回類型,也無參數(shù)。Person類的析構函數(shù)為 Person()。C#中類析構函數(shù)不能顯示地被調用,它是被垃圾收集器撤銷不被使用的對象時自動調用的。1.3

23、.5 類的構造函數(shù)的重載在C#語言中,同一個類中的函數(shù),如果函數(shù)名相同,而參數(shù)類型或個數(shù)不同,認為是不同的函數(shù),這叫函數(shù)重載。僅返回值不同,不能看作不同的函數(shù)。這樣,可以在類定義中,定義多個構造函數(shù),名字相同,參數(shù)類型或個數(shù)不同。根據(jù)生成類的對象方法不同,調用不同的構造函數(shù)。例如可以定義Person類沒有參數(shù)的構造函數(shù)如下:public Person()/類的構造函數(shù),函數(shù)名和類同名,無返回值。 name="張三"age=12;用語句Person OnePerson=new Person("李四",30)生成對象時,將調用有參數(shù)的構造函數(shù),而用語句Per

24、son OnePerson=new Person()生成對象時,調用無參數(shù)的構造函數(shù)。由于析構函數(shù)無參數(shù),因此,析構函數(shù)不能重載。1.3.6 使用Person類的完整的例子下邊用一個完整的例子說明Person類的使用:(VisualStudio.Net編譯通過)using System;namespace e1/定義以下代碼所屬命名空間,意義見以后章節(jié) class Person private String name="張三"/類的數(shù)據(jù)成員聲明private int age=12;public void Display()/類的方法(函數(shù))聲明,顯示姓名和年齡 Consol

25、e.WriteLine("姓名:0,年齡:1",name,age);public void SetName(string PersonName)/指定修改姓名的方法(函數(shù)) name=PersonName;public void SetAge(int PersonAge)/指定修改年齡的方法(函數(shù)) age=PersonAge;public Person(string Name,int Age)/構造函數(shù),函數(shù)名和類同名,無返回值 name=Name;age=Age;public Person()/類的構造函數(shù)重載 name="田七"age=12;cla

26、ss Class1 static void Main(string args) Person OnePerson=new Person("李四",30);/生成類的對象OnePerson.Display();/下句錯誤,在其它類(Class1類)中,不能直接修改Person類中的私有成員。/OneP="王五"/只能通過Person類中公有方法SetName修改Person類中的私有成員name。OnePerson.SetName("王五");OnePerson.SetAge(40);OnePerson.Displa

27、y();OnePerson=new Person();OnePerson.Display();鍵入CTRL+F5運行后,顯示的效果是:姓名: 李四,年齡:30姓名: 王五,年齡:40姓名: 田七,年齡:121.4 C#的數(shù)據(jù)類型從大的方面來分,C#語言的數(shù)據(jù)類型可以分為三種:值類型,引用類型,指針類型,指針類型僅用于非安全代碼中。本節(jié)重點討論值類型和引用類型。1.4.1 值類型和引用類型區(qū)別在C#語言中,值類型變量存儲的是數(shù)據(jù)類型所代表的實際數(shù)據(jù),值類型變量的值(或實例)存儲在棧(Stack)中,賦值語句是傳遞變量的值。引用類型(例如類就是引用類型)的實例,也叫對象,不存在棧中,而存儲在可管理

28、堆(Managed Heap)中,堆實際上是計算機系統(tǒng)中的空閑內存。引用類型變量的值存儲在棧(Stack)中,但存儲的不是引用類型對象,而是存儲引用類型對象的引用,即地址,和指針所代表的地址不同,引用所代表的地址不能被修改,也不能轉換為其它類型地址,它是引用型變量,只能引用指定類對象,引用類型變量賦值語句是傳遞對象的地址。見下例:using System;class MyClass/類為引用類型 public int a=0;class Test static void Main() f1();static public void f1() int v1=1;/值類型變量v1,其值1存儲在棧(

29、Stack)中int v2=v1;/將v1的值(為1)傳遞給v2,v2=1,v1值不變。v2=2;/v2=2,v1值不變。MyClass r1=new MyClass();/引用變量r1存儲MyClass類對象的地址MyClass r2=r1;/r1和r2都代表是同一個MyClass類對象r2.a=2;/和語句r1.a=2等價存儲在棧中的變量,當其生命周期結束,自動被撤銷,例如,v1存儲在棧中,v1和函數(shù)f1同生命周期,退出函數(shù)f1,v1不存在了。但在堆中的對象不能自動被撤銷。因此C和C+語言,在堆中建立的對象,不使用時必須用語句釋放對象占用的存儲空間。.NET系統(tǒng)CLR內建垃圾收集器,當對象

30、的引用變量被撤銷,表示對象的生命周期結束,垃圾收集器負責收回不被使用的對象占用的存儲空間。例如,上例中引用變量r1及r2是MyClass類對象的引用,存儲在棧中,退出函數(shù)f1,r1和r2都不存在了,在堆中的MyClass類對象也就被垃圾收集器撤銷。也就是說,CLR具有自動內存管理功能。終于明白了2 1.4.2 值類型變量分類C#語言值類型可以分為以下幾種:l 簡單類型(Simple types)簡單類型中包括:數(shù)值類型和布爾類型(bool)。數(shù)值類型又細分為:整數(shù)類型、字符類型(char)、浮點數(shù)類型和十進制類型(decimal)。l 結構類型(Struct types)l 枚舉類型(Enum

31、eration types)C#語言值類型變量無論如何定義,總是值類型變量,不會變?yōu)橐妙愋妥兞俊?.4.3 結構類型結構類型和類一樣,可以聲明構造函數(shù)、數(shù)據(jù)成員、方法、屬性等。結構和類的最根本的區(qū)別是結構是值類型,類是引用類型。和類不同,結構不能從另外一個結構或者類派生,本身也不能被繼承,因此不能定義抽象結構,結構成員也不能被訪問權限控制字protected修飾,也不能用virtual和abstract修飾結構方法。在結構中不能定義析構函數(shù)。雖然結構不能從類和結構派生,可是結構能夠繼承接口,結構繼承接口的方法和類繼承接口的方法基本一致。下面例子定義一個點結構point:using Syste

32、m;struct point/結構定義 public int x,y;/結構中也可以聲明構造函數(shù)和方法,變量不能賦初值class Test static void Main() point P1;P1.x=166;P1.y=111;point P2;P2=P1;/值傳遞,使P2.x=166,P2.y=111point P3=new point();/用new生成結構變量P3,P3仍為值類型變量/用new生成結構變量P3僅表示調用默認構造函數(shù),使x=y=0。1.4.4 簡單類型簡單類型也是結構類型,因此有構造函數(shù)、數(shù)據(jù)成員、方法、屬性等,因此下列語句int i=int.MaxValue;stri

33、ng s=i.ToString()是正確的。即使一個常量,C#也會生成結構類型的實例,因此也可以使用結構類型的方法,例如:string s=13.ToString()是正確的。簡單類型包括:整數(shù)類型、字符類型、布爾類型、浮點數(shù)類型、十進制類型。見下表:保留字System命名空間中的名字字節(jié)數(shù)取值范圍sbyteSystem.Sbyte1-128127byteSystem.Byte10255shortSystem.Int162-3276832767ushortSystem.UInt162065535intSystem.Int324-21474836482147483647uintSystem.UI

34、nt32404292967295longSystem.Int648-92233720368547758089223372036854775808ulongSystem.UInt648018446744073709551615charSystem.Char2065535floatSystem.Single43.4E-383.4E+38doubleSystem.Double81.7E-3081.7E+308boolSystem.Boolean (true,false)decimalSystem.Decimal16正負 1.0×10-28 到7.9×1028之間C#簡單類型使用方

35、法和C、C+中相應的數(shù)據(jù)類型基本一致。需要注意的是:l 和C語言不同,無論在何種系統(tǒng)中,C#每種數(shù)據(jù)類型所占字節(jié)數(shù)是一定的。l 字符類型采用Unicode字符集,一個Unicode標準字符長度為16位。l 整數(shù)類型不能隱式被轉換為字符類型(char),例如char c1=10是錯誤的,必須寫成:char c1=(char)10,char c='A',char c='x0032'char c='u0032'。l 布爾類型有兩個值:false,true。不能認為整數(shù)0是false,其它值是true。bool x=1是錯誤的,不存在這種寫法,只能寫成x

36、=true 或x=false。l 十進制類型(decimal)也是浮點數(shù)類型,只是精度比較高,一般用于財政金融計算。1.4.5 枚舉類型C#枚舉類型使用方法和C、C+中的枚舉類型基本一致。見下例:using System;class Class1 enum Days Sat=1, Sun, Mon, Tue, Wed, Thu, Fri; /使用Visual Studio.Net,enum語句添加在STAThread前邊 static void Main(string args) Days day=Days.Tue; int x=(int)Days.Tue;/x=2 Console.Write

37、Line("day=0,x=1",day,x);/顯示結果為:day=Tue,x=4 在此枚舉類型Days中,每個元素的默認類型為int,其中Sun=0,Mon=1,Tue=2,依此類推。也可以直接給枚舉元素賦值。例如:enum DaysSat=1,Sun,Mon,Tue,Wed,Thu,Fri,Sat;終于明白了3 在此枚舉中,Sun=1,Mon=2,Tue=3,Wed=4,等等。和C、C+中不同,C#枚舉元素類型可以是byte、sbyte、short、ushort、int、uint、long和ulong類型,但不能是char類型。見下例:enum Days:byteSu

38、n,Mon,Tue,Wed,Thu,Fri,Sat;/元素為字節(jié)類型1.4.6 值類型的初值和默認構造函數(shù)所有變量都要求必須有初值,如沒有賦值,采用默認值。對于簡單類型,sbyte、byte、short、ushort、int、uint、long和ulong默認值為0,char類型默認值是(char)0,float為0.0f,double為0.0d,decimal為0.0m,bool為false,枚舉類型為0,在結構類型和類中,數(shù)據(jù)成員的數(shù)值類型變量設置為默認值,引用類型變量設置為null??梢燥@示的賦值,例如int i=0。而對于復雜結構類型,其中的每個數(shù)據(jù)成員都按此種方法賦值,顯得過于麻煩。

39、由于數(shù)值類型都是結構類型,可用new語句調用其構造函數(shù)初始化數(shù)值類型變量,例如:int j=new int()。請注意,用new語句并不是把int變量變?yōu)橐米兞?,j仍是值類型變量,這里new僅僅是調用其構造函數(shù)。所有的數(shù)值類型都有默認的無參數(shù)的構造函數(shù),其功能就是為該數(shù)值類型賦初值為默認值。對于自定義結構類型,由于已有默認的無參數(shù)的構造函數(shù),不能再定義無參數(shù)的構造函數(shù),但可以定義有參數(shù)的構造函數(shù)。1.4.7 引用類型分類C#語言中引用類型可以分為以下幾種:l 類:C#語言中預定義了一些類:對象類(object類)、數(shù)組類、字符串類等。當然,程序員可以定義其它類。l 接口。l 代表。C#語言引

40、用類型變量無論如何定義,總是引用類型變量,不會變?yōu)橹殿愋妥兞?。C#語言引用類型對象一般用運算符new建立,用引用類型變量引用該對象。本節(jié)僅介紹對象類型(object類型)、字符串類型、數(shù)組。其它類型在其它節(jié)中介紹。1.4.8 對象類(object類)C#中的所有類型(包括數(shù)值類型)都直接或間接地以object類為基類。對象類(object類)是所有其它類的基類。任何一個類定義,如果不指定基類,默認object為基類。繼承和基類的概念見以后章節(jié)。C#語言規(guī)定,基類的引用變量可以引用派生類的對象(注意,派生類的引用變量不可以引用基類的對象),因此,對一個object的變量可以賦予任何類型的值:in

41、t x =25;object obj1;obj1=x;object obj2= 'A'object關鍵字是在命名空間System中定義的,是類System.Object的別名。1.4.9 數(shù)組類在進行批量處理數(shù)據(jù)的時候,要用到數(shù)組。數(shù)組是一組類型相同的有序數(shù)據(jù)。數(shù)組按照數(shù)組名、數(shù)據(jù)元素的類型和維數(shù)來進行描述。C#語言中數(shù)組是類System.Array類對象,比如聲明一個整型數(shù)數(shù)組:int arr=new int5;實際上生成了一個數(shù)組類對象,arr是這個對象的引用(地址)。在C#中數(shù)組可以是一維的也可以是多維的,同樣也支持數(shù)組的數(shù)組,即數(shù)組的元素還是數(shù)組。一維數(shù)組最為普遍,用的

42、也最多。我們先看一個一維數(shù)組的例子:using System;class Test static void Main() int arr=new int3;/用new運算符建立一個3個元素的一維數(shù)組for(int i=0;i<arr.Length;i+)/arr.Length是數(shù)組類變量,表示數(shù)組元素個數(shù)arri=i*i;/數(shù)組元素賦初值,arri表示第i個元素的值for (int i=0;i<arr.Length;i+)/數(shù)組第一個元素的下標為0Console.WriteLine("arr0=1",i,arri);這個程序創(chuàng)建了一個int類型3個元素的一維數(shù)組

43、,初始化后逐項輸出。其中arr.Length表示數(shù)組元素的個數(shù)。注意數(shù)組定義不能寫為C語言格式:int arr。程序的輸出為:arr0 = 0arr1 = 1arr2 = 4上面的例子中使用的是一維數(shù)組,下面介紹多維數(shù)組:string a1;/一維string數(shù)組類引用變量a1string, a2;/二維string數(shù)組類引用變量a2a2=new string2,3;a21,2="abc"string, a3;/三維string數(shù)組類引用變量a3string j2;/數(shù)組的數(shù)組,即數(shù)組的元素還是數(shù)組string j3;在數(shù)組聲明的時候,可以對數(shù)組元素進行賦值??聪旅娴睦樱?/p>

44、int a1=new int1,2,3;/一維數(shù)組,有3個元素。int a2=new int31,2,3;/此格式也正確int a3=1,2,3;/相當于int a3=new int1,2,3;int, a4=new int,1,2,3,4,5,6;/二維數(shù)組,a41,1=5int j2=new int3;/定義數(shù)組j2,有三個元素,每個元素都是一個數(shù)組j20=new int1,2,3;/定義第一個元素,是一個數(shù)組j21=new int1, 2, 3, 4, 5, 6;/每個元素的數(shù)組可以不等長j22=new int1, 2, 3, 4, 5, 6, 7, 8, 9;1.4.10 字符串類(s

45、tring類)C#還定義了一個基本的類string,專門用于對字符串的操作。這個類也是在名字空間System中定義的,是類System.String的別名。字符串應用非常廣泛,在string類的定義中封裝了許多方法,下面的一些語句展示了string類的一些典型用法:l 字符串定義string s;/定義一個字符串引用類型變量ss="Zhang"/字符串引用類型變量s指向字符串"Zhang"string FirstName="Ming"string LastName="Zhang"string Name=FirstN

46、ame+" "+LastName;/運算符+已被重載string SameName=Name;char s2='計','算','機','科','學'string s3=new String(s2);l 字符串搜索string s="ABC科學"int i=s.IndexOf("科");搜索"科"在字符串中的位置,因第一個字符索引為0,所以"A"索引為0,"科"索引為3,因此這里i=3,如沒有此字符

47、串i=-1。注意C#中,ASCII和漢字都用2字節(jié)表示。l 字符串比較函數(shù)string s1="abc"string s2="abc"int n=string.Compare(s1,s2);/n=0n=0表示兩個字符串相同,n小于零,s1<s2,n大于零,s1>s2。此方法區(qū)分大小寫。也可用如下辦法比較字符串:string s1="abc"string s="abc"string s2="不相同"if(s=s1)/還可用!=。雖然String是引用類型,但這里比較兩個字符串的值s2=

48、"相同"l 判斷是否為空字符串string s=""string s1="不空"if(s.Length=0)s1="空"l 得到子字符串或字符string s="取子字符串"string sb=s.Substring(2,2);/從索引為2開始取2個字符,Sb="字符",s內容不變char sb1=s0;/sb1='取'Console.WriteLine(sb1);/顯示:取l 字符串刪除函數(shù)string s="取子字符串"string s

49、b=s.Remove(0,2);/從索引為0開始刪除2個字符,Sb="字符串",s內容不變l 插入字符串string s="計算機科學"string s1=s.Insert(3,"軟件");/s1="計算機軟件科學",s內容不變l 字符串替換函數(shù)string s="計算機科學"string s1=s.Replace("計算機","軟件");/s1="軟件科學",s內容不變l 把String轉換為字符數(shù)組string S="計算

50、機科學"char s2=S.ToCharArray(0,S.Length);/屬性Length為字符類對象的長度l 其它數(shù)據(jù)類型轉換為字符串int i=9;string s8=i.ToString();/s8="9"float n=1.9f;string s9=n.ToString();/s8="1.9"其它數(shù)據(jù)類型都可用此方法轉換為字符類對象l 大小寫轉換string s="AaBbCc"string s1=s.ToLower();/把字符轉換為小寫,s內容不變string s2=s.ToUpper();/把字符轉換為大寫

51、,s內容不變l 刪除所有的空格string s="A bc "s.Trim();/刪除所有的空格string類其它方法的使用請用幫助系統(tǒng)查看,方法是打開Visual Studio.Net的代碼編輯器,鍵入string,將光標移到鍵入的字符串string上,然后按F1鍵。1.4.11 類型轉換在編寫C#語言程序中,經常會碰到類型轉換問題。例如整型數(shù)和浮點數(shù)相加,C#會進行隱式轉換。詳細記住那些類型數(shù)據(jù)可以轉換為其它類型數(shù)據(jù),是不可能的,也是不必要的。程序員應記住類型轉換的一些基本原則,編譯器在轉換發(fā)生問題時,會給出提示。C#語言中類型轉換分為:隱式轉換、顯示轉換、加框(box

52、ing)和消框(unboxing)等三種。一隱式轉換隱式轉換就是系統(tǒng)默認的、不需要加以聲明就可以進行的轉換。例如從int類型轉換到long類型就是一種隱式轉換。在隱式轉換過程中,轉換一般不會失敗,轉換過程中也不會導致信息丟失。例如:int i=10;long l=i;二顯示轉換顯式類型轉換,又叫強制類型轉換。與隱式轉換正好相反,顯式轉換需要明確地指定轉換類型,顯示轉換可能導致信息丟失。下面的例子把長整形變量顯式轉換為整型:long l=5000;int i=(int)l;/如果超過int取值范圍,將產生異常三加框(boxing)和消框(unboxing)加框(boxing)和消框(unboxing)是C#語言類型系統(tǒng)提出的核心概念,加框是值類型轉換為obje

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論