版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 C# 程序設(shè)計(jì) 第1章 C# 2.0開發(fā)環(huán)境1.1.1 .NET Framework 2.0簡介 一個(gè)建立、配置和運(yùn)行web服務(wù)以及應(yīng)用程序的多語言環(huán)境,是Microsoft的新一代web應(yīng)用程序開發(fā)平臺(tái),它包含以下三個(gè)主要部分 :公共語言運(yùn)行時(shí)環(huán)境(common language runtime, CLR)框架類庫(Framework Class Library,FCL) ASP.NET1.1.2 C#介紹C#是一種面向?qū)ο蟮木幊陶Z言,是從C和C+派生出來的一種簡單、現(xiàn)代、面向?qū)ο蠛皖愋桶踩木幊陶Z言,其語言體系都構(gòu)建在.NET框架上,并且能夠與.NET框架完美結(jié)合。優(yōu)勢(shì):快速應(yīng)用開發(fā)(R
2、AD)功能語言的自由性強(qiáng)大的Web服務(wù)端組件支持跨平臺(tái)與XML的融合對(duì)C+的繼承1.2 VS 2008集成開發(fā)環(huán)境集成開發(fā)環(huán)境(簡稱IDE Integrated Development Environment )是用于提供程序開發(fā)環(huán)境的應(yīng)用程序,主要包括代碼編輯器、編譯器、調(diào)試器和圖形用戶界面工具,為用戶提供了一個(gè)完全的編程環(huán)境。Visual Studio2008是微軟公司出品的一款大型應(yīng)用軟件,是.NET開發(fā)的首選工具,其中C#是使用最廣發(fā)的開發(fā)語言,方便用戶快速有效的建立應(yīng)用程序。1.2.1 安裝環(huán)境要求系統(tǒng)配置要求:處理器:最低1.6GHZ,推薦2.2GHZ或以上。內(nèi)存:最低384MB(
3、Vista最低768MB),推薦1GB或以上。硬盤:最低5400RPM,推薦7200RPM或更高轉(zhuǎn)速,Visual Studio 2008安裝最小需要1.22GB的可用硬盤空間,完全安裝需要大概4GB的可用硬盤空間?,F(xiàn)實(shí)設(shè)備:最低1024*768,推薦1280*1024或以上的分辨率。操作系統(tǒng):建議使用Windows XP或更新版本操作系統(tǒng)。1.2.2 軟件安裝步驟(1)首先購買Visual Studio 2008的安裝光盤,也可以下載Visual Studio 2008安裝軟件,網(wǎng)上有很多下載地址。將Visual Studio 2008安裝光盤放入DVD光驅(qū),屏幕將彈出圖1-1所示的窗體。1
4、.2.2 軟件安裝步驟(續(xù))(2)單擊第1項(xiàng)“安裝Visual Studio 2008”鏈接,進(jìn)入下一步安裝,如圖1-2所示,用戶此時(shí)可以根據(jù)自己意愿選擇是否參加微軟幫助改進(jìn)安裝活動(dòng)。1.2.2 軟件安裝步驟(續(xù))(3)單擊“下一步”,彈出如圖1-3所示的窗體。這個(gè)窗體中包含用戶許可協(xié)議,用戶必須接受許可協(xié)議中的條款才可繼續(xù)安裝,且用戶需在制定的文本框中輸入產(chǎn)品的密鑰。1.2.2 軟件安裝步驟(續(xù))(4)單擊“下一步”按鈕,進(jìn)入如圖1-4所示的窗體,用戶此時(shí)可以根據(jù)自己的需求選擇“默認(rèn)值”、“完全”或“自定義”模式安裝組件。如果硬盤空間足夠,建議用戶完全安裝。此處允許用戶選擇更改安裝路徑,Vi
5、sual Studio 2008的默認(rèn)安裝路徑為“C:Program FilesMicrosoft Visual Studio9.0”。1.2.2 軟件安裝步驟(續(xù))(5)完成設(shè)置,單擊“安裝”按鈕,開始安裝,安裝軟件將進(jìn)入一個(gè)漫長的安裝過程,如圖1-5所示。1.2.2 軟件安裝步驟(續(xù))(6)安裝完成后顯示安裝成功的窗體,如圖1-6示,重新啟動(dòng)電腦,安裝結(jié)束。1.2.3 VS 2008基本功能簡介(1) 菜單欄在標(biāo)題欄下的水平欄,包含:文件、編輯、查看等7個(gè)菜單 (2) 工具欄為了操作更方便、快捷,常用的菜單命令按功能分組,被分別放入相應(yīng)的工具欄中,方便開發(fā)人員的使用 (3) 工具箱面板工具
6、箱是Visual Studio 2008的重要工具,它提供了進(jìn)行Windows窗體應(yīng)用程序開發(fā)所必需的控件,通過工具箱開發(fā)人員可以方便地進(jìn)行可視化的窗體設(shè)計(jì),簡化了程序設(shè)計(jì)的工作量,提高了工作效率。 1.2.3 VS 2008基本功能簡介(續(xù))(4) “屬性”面板“屬性”面板是Visual Studio 2008的一個(gè)非常有用的工具。該面板為Widows窗體應(yīng)用程序的開封提供了簡單的屬性修改方式,還提供了事件的管理功能,可以管理控件事件,方便編程時(shí)對(duì)事件的處理。如圖1-11所示。 (5) 代碼編輯器代碼編輯器提供了強(qiáng)大的代碼編輯功能,它提供了自動(dòng)換行、漸進(jìn)式搜索、代碼的大綱顯示等新功能,窗體如
7、圖1-12所示。1.2.3 VS 2008基本功能簡介(續(xù))(6) “錯(cuò)誤列表”面板編寫程序代碼、編譯程序和運(yùn)行程序過程中發(fā)現(xiàn)的錯(cuò)誤都會(huì)顯示到“錯(cuò)誤列表”面板中。在開發(fā)過程中,“錯(cuò)誤列表”面板會(huì)提示錯(cuò)誤信息,方便開發(fā)人員可以從及時(shí)發(fā)現(xiàn)錯(cuò)誤并修改錯(cuò)誤。(7) “輸出”面板“輸出”用于提示項(xiàng)目的生成情況。 1.3 命名空間 “命名空間”,也稱“名稱空間”,是 VS.NET中的各種語言使用的一種代碼組織的形式,通過名稱空間來分類,區(qū)別不同的代碼功能,是解決命名沖突的主要途徑。命名空間是數(shù)據(jù)類型的一種組合方式,但在命名空間中所有數(shù)據(jù)類型的名稱都會(huì)自動(dòng)加上該命名空間的名字作為其前綴。命名空間還可以相互嵌
8、套。例如,大多數(shù)用于一般目的的.NET基類位于命名空間System中,基類Array在這個(gè)命名空間中,所以其全名是System.Array。.NET需要在命名空間中定義所有的類型,例如,可以把Customer類放在命名空間YourCompanyName中,則這個(gè)類的全名就是YourCompanyName.Customer。 1.4 創(chuàng)建第一個(gè)C#項(xiàng)目1.4.1 第一個(gè)控制臺(tái)應(yīng)用程序.NET可以實(shí)現(xiàn)多種應(yīng)用程序開發(fā),包括控制臺(tái)應(yīng)用程序、Windows窗體應(yīng)用程序、WPF應(yīng)用程序、WCF服務(wù)應(yīng)用程序等。創(chuàng)建步驟:(1)選擇“文件”“新建”“項(xiàng)目”命令,彈出“新建項(xiàng)目”的窗口。1.4.1 第一個(gè)控制
9、臺(tái)應(yīng)用程序(續(xù))(2)在“新建項(xiàng)目”窗口中,先選擇左邊“項(xiàng)目類型”列表框“Visual C#”選項(xiàng),然后選擇右邊“模板”列表框“控制臺(tái)應(yīng)用程序”選項(xiàng)。在下方,需要輸入項(xiàng)目名稱“HelloWorld”,選擇項(xiàng)目保存位置。(3)單擊“確定”按鈕,Visual Studio 2008自動(dòng)生成應(yīng)用程序。1.4.1 第一個(gè)控制臺(tái)應(yīng)用程序(續(xù))(4)編寫程序代碼,在Main()函數(shù)中加入一行代碼,用于顯示“Hello World”。static void Main(string args) Console.Write(Hello World);/用于顯示“Hello World”字符串 (5)最后運(yùn)行程序
10、。選擇“調(diào)試”“啟動(dòng)調(diào)試(或按F5)”,也可以選擇“調(diào)試”“開始執(zhí)行(或按Ctrl+F5)”運(yùn)行程序。1.4.2 第一個(gè)Windows窗體應(yīng)用程序Windows窗體應(yīng)用程序就是Windows圖形界面應(yīng)用程序,它能通過窗體和對(duì)話框完成于計(jì)算機(jī)用戶的信息交互,并實(shí)現(xiàn)一系列的功能。 開發(fā)步驟:(1) 選擇“文件”“新建”“項(xiàng)目”命令,彈出“新建項(xiàng)目”的窗口,在“新建項(xiàng)目”窗口中,先選擇左邊“項(xiàng)目類型”列表框“Visual C#”選項(xiàng),然后選擇右邊“模板”列表框“Windows窗體應(yīng)用程序”選項(xiàng)。在下方,需要輸入項(xiàng)目名稱“Welcome”,選擇項(xiàng)目保存位置,單擊“確定”按鈕。1.4.2 第一個(gè)Wind
11、ows窗體應(yīng)用程序(續(xù))(2)查看“解決方案資源管理器”窗口,如圖所示。在文件“Form1.cs”上單擊右鍵,選擇“重命名”,將其改名為“Welcome.cs”。(3)查看主窗口,里面自動(dòng)生成一個(gè)名為“Form1”的窗體,然后單擊右側(cè)“屬性”窗口,該窗口如圖1-20所示,修改Name屬性為“Welcome”,修改Text屬性為“Welcome”。 1.4.2 第一個(gè)Windows窗體應(yīng)用程序(續(xù))(4)單擊主窗口左側(cè)的“工具箱”窗口,出現(xiàn)一些Windows控件。(5)雙擊“Label”控件,或者單擊后按住左鍵將其拖至主窗口的窗體中,并設(shè)置“Lable”控件的屬性。(6)雙擊“Button”控件
12、,或者單擊后按住左鍵將其拖至主窗口的窗體中,并設(shè)置“Button”控件的屬性。NamelbtnShowText顯示NamelblDisplayText空BackColorWindow1.4.2 第一個(gè)Windows窗體應(yīng)用程序(續(xù))(7)雙擊“顯示”按鈕,將進(jìn)入代碼窗口,可以看到VS.NET已經(jīng)自動(dòng)生成了很多代碼。進(jìn)入代碼窗口后,光標(biāo)自動(dòng)位于方法“btnShow_Click()”內(nèi)部,在光標(biāo)處添加如下代碼:this.lblDisplay.Text = Welcome to C#!;(8)選擇“調(diào)試”“開始執(zhí)行(不調(diào)試)”菜單項(xiàng),或者使用快捷鍵“CTRL+F5”運(yùn)行程序,單擊“顯示”按鈕,在標(biāo)簽
13、中就會(huì)出現(xiàn)如圖所示的結(jié)果。 1.5 MSDNMSDN 的全稱是 Microsoft Developer Network,是微軟公司面向軟件開發(fā)者的一種信息服務(wù),是開發(fā)人員不可缺少的工具。MSDN 實(shí)際上是一個(gè)以 Visual Studio 和 Windows 平臺(tái)為核心整合的開發(fā)虛擬社區(qū),包括技術(shù)文檔、在線電子教程、網(wǎng)絡(luò)虛擬實(shí)驗(yàn)室、微軟產(chǎn)品下載等等一系列服務(wù),它涵蓋了所有的可以被開發(fā)擴(kuò)充的平臺(tái)和應(yīng)用程序,作為一個(gè)學(xué)習(xí)者,更應(yīng)該學(xué)會(huì)使用MSDN。MSDN的基本使用(1) 目錄瀏覽單擊工具欄“目錄”按鈕,可以在主界面左側(cè),可以讓用戶快速的對(duì)MSDN的結(jié)構(gòu)有一個(gè)大概的了解,為用戶使用MSDN起到導(dǎo)航
14、的作用。(2) 索引快速訪問單擊工具欄“索引”按鈕,可以在主界面的左側(cè) “索引”面板。用戶可以在“查詢”文本框中輸入所要查詢的內(nèi)容并回車,MSDN將自動(dòng)搜索最匹配的技術(shù)文檔,供用戶閱讀。(3) 搜索MSDN文檔庫MSDN還為用戶提供了一種強(qiáng)大的搜索功能,可以提供對(duì)本地幫助、MSDN Online、Codezone社區(qū)等許多文檔庫的詳細(xì)搜索。單擊工具欄中的搜索按鈕,并在文本框中輸入搜索的內(nèi)容提要,并回車,搜索的結(jié)果將以概要方式呈現(xiàn)在主界面中,用戶可以根據(jù)自己的需要選擇不同的文檔進(jìn)行閱讀。第2章 C#程序設(shè)計(jì)基礎(chǔ)2.1 C#語句語句是構(gòu)成程序的主要組成部分,編寫任何程序都必須以語句為單位構(gòu)成的。所
15、謂語句,其實(shí)就是構(gòu)造所有C#程序的過程構(gòu)造塊。 C#語句可以分為5大類,分別是:1. 控制語句,能 完成一定的控制功能,C#提供了9種控制語句。2.方法調(diào)用語句,由一次函數(shù)調(diào)用加一 個(gè)分號(hào)構(gòu)成一個(gè)語句3. 表達(dá)式語句,由一個(gè)表達(dá)式構(gòu)成一個(gè)語句4.空語句,是由一個(gè)分號(hào)組成,不進(jìn)行任何操作5. 代碼塊,是可以用 把一些語句括起來成為復(fù)合語句2.2 關(guān)鍵字與標(biāo)識(shí)符C#語言主要由關(guān)鍵字、標(biāo)識(shí)符、運(yùn)算符等元素組成。這幾種元素有著不同的語法含義和組成規(guī)則,它們之間相互配合,共同完成C#的語義表達(dá)。 2.2.1關(guān)鍵字關(guān)鍵字也被稱為保留字,是C#語言本身使用的標(biāo)識(shí)符,它有特定的語法含義,所有的C#關(guān)鍵字不用做
16、標(biāo)識(shí)符,其常見的關(guān)鍵字如右所示。2.2.2 標(biāo)識(shí)符標(biāo)識(shí)符是對(duì)程序中的各個(gè)元素(如變量、常量、方法等)加以命名時(shí)使用的命名記號(hào)。在C#語言中,標(biāo)識(shí)符是一個(gè)字符序列,它有特定的命名規(guī)則:標(biāo)識(shí)符必須以字母、下劃線“_”或者“”開頭,后面的字符可以是字母、下劃線或數(shù)字,不能包含空格、標(biāo)點(diǎn)符號(hào)、運(yùn)算符等其他符號(hào);標(biāo)識(shí)符不能命名為C#的關(guān)鍵字;標(biāo)識(shí)符不能命名為C#的庫函數(shù)。(1)變量1.數(shù)據(jù)類型數(shù)值型:byte、short、int和long浮點(diǎn)型:float和double字符型:char布爾型:bool數(shù)值類型C# 數(shù)據(jù)類型大小默認(rèn)值 示例sbyte (byte)有(無)符號(hào)的 8 位整數(shù) 0byte g
17、pa = 2;short (ushort)有(無)符號(hào)的 16 位整數(shù) 0short salary = 3400;int (uint)有(無)符號(hào)的 32 位整數(shù) 0int rating = 20;long (ulong)有(無)符號(hào)的 64 位整數(shù) 0Llong population = 23451900;float32 位浮點(diǎn)數(shù),精確到小數(shù)點(diǎn)后 7 位 0.0Ffloat temperature = 40.6F;double雙精度浮點(diǎn)型,15或16個(gè)有效數(shù)字 0.0double temperature = 40.6;decimal 28個(gè)有效數(shù)字的精確小數(shù)型 0.0decimal temp
18、erature = 40.6變量(續(xù))2.變量聲明在C#中,使用變量之前必須聲明。變量聲明的語法規(guī)則如下:type identifier=value,identifier=value;聲明多個(gè)同類型的變量,可以用逗號(hào)隔開。變量的兩種方式賦值:使用賦值運(yùn)算符 (=)給變量i賦值,例如:int i;i = 10;聲明變量,并初始化它的值,例如:int i=10;變量(續(xù))3.變量的類型在C#語言中,把變量分成3種類型,它們有各自的特點(diǎn)。實(shí)例變量:是不帶任何關(guān)鍵字的變量,例如:int i。實(shí)例變量在其所在的方法調(diào)用結(jié)束后,其數(shù)據(jù)會(huì)被清除掉,所占的內(nèi)存空間也會(huì)被釋放。靜態(tài)變量:是使用了“static”
19、關(guān)鍵字修飾的變量,例如:static int i。靜態(tài)變量在函數(shù)調(diào)用結(jié)束仍保留變量值,直到程序結(jié)束前一直存在。另外,靜態(tài)變量不在類的方法中定義,因?yàn)檫@沒有意義。局部變量:是指一個(gè)獨(dú)立的代碼塊中聲明的變量,只有在這個(gè)代碼塊中有效,一旦離開這個(gè)作用域,將不再存在。(2)常量常量的聲明和變量類似,需要指定數(shù)據(jù)類型、常量名、初始值,并需要使用關(guān)鍵字const,常量聲明的語法規(guī)則如下:const typeidentifier=value;2.3 運(yùn)算符與表達(dá)式1.一元運(yùn)算符一元運(yùn)算符就是運(yùn)算和一個(gè)變量就可構(gòu)成一個(gè)表達(dá)式。C#的一元運(yùn)算符包括自增運(yùn)算符(+)和自減運(yùn)算符(-)。自增運(yùn)算符(+)是操作數(shù)加1
20、,自減運(yùn)算符(-)是操作數(shù)減1。2.二元運(yùn)算符二元運(yùn)算符需要兩個(gè)操作數(shù)的參與,常見的二元運(yùn)算符算術(shù)運(yùn)算符:加(+)、減(-)、乘(*)、除(/)和取模運(yùn)算符(%) 邏輯運(yùn)算符:表示操作數(shù)的邏輯關(guān)系,其運(yùn)算結(jié)果用布爾值表示。常見的邏輯運(yùn)算符有、=、=、!=、&、|、!。位運(yùn)算符:用來對(duì)數(shù)據(jù)按二進(jìn)制位進(jìn)行運(yùn)算的操作符,其運(yùn)算符包括與(&)、或(|)、異或()、非()、左移() 3.三元運(yùn)算符三元運(yùn)算符(?:)也叫做條件運(yùn)算符,它需要三個(gè)操作數(shù)。該運(yùn)算符的一般形式為:exp1?exp2:exp3;其中exp1、exp2、exp3是表達(dá)式,首先計(jì)算exp1,如果結(jié)果為真,則將exp2的運(yùn)算結(jié)果作為整個(gè)
21、表達(dá)式的結(jié)果;如果結(jié)果為假,則將exp3的運(yùn)算結(jié)果作為整個(gè)表達(dá)式的結(jié)果。4.其他簡化運(yùn)算符+=、-=、*=、/=、%=、&=、|=、=、=運(yùn)算符的優(yōu)先級(jí) 表達(dá)式 表達(dá)式是可以結(jié)算且結(jié)果為單個(gè)值、對(duì)象、方法或命名空間的代碼片段。表達(dá)式可以使用運(yùn)算符和參數(shù)構(gòu)成符號(hào)C#規(guī)則的式子,而參數(shù)又可以是由其他運(yùn)算符與參數(shù)構(gòu)成的表達(dá)式組成,因此表達(dá)式可以很簡單,也可以很復(fù)雜。在編寫程序時(shí),不同參數(shù)的數(shù)據(jù)類型可能不同,在C#中,這種進(jìn)行數(shù)據(jù)統(tǒng)一的方法叫做轉(zhuǎn)化。轉(zhuǎn)換是可以把一個(gè)表達(dá)式的編譯時(shí)類型當(dāng)作另一種編譯時(shí)類型處理。轉(zhuǎn)化有隱式的或顯式的。隱式轉(zhuǎn)換時(shí),系統(tǒng)將按照數(shù)據(jù)類型的表示范圍由小到大的轉(zhuǎn)換原則自動(dòng)進(jìn)行。數(shù)據(jù)
22、類型的表示范圍由小到大的順序依次為:小大,即byteshortcharintlongfloatdouble;顯式轉(zhuǎn)化正好相反,當(dāng)數(shù)據(jù)類型的標(biāo)識(shí)范圍由大到小的順序時(shí),必須采用顯式轉(zhuǎn)化,否則編譯器會(huì)報(bào)錯(cuò)。 2.4 枚舉與結(jié)構(gòu)public class Holiday public enum WeekDays Monday,Tuesday,Wednesday,Thursday,Friday public void GetWeekDays (String EmpName, WeekDays DayOff) /處理工作日 static void Main() Holiday myHoliday = new
23、 Holiday(); myHoliday.GetWeekDays (Richie, Holiday.WeekDays.Wednesday); 1.枚舉(Enum,Enumerator 的縮寫)是一組已命名的數(shù)值常量 ,用于定義具有一組特定值的數(shù)據(jù)類型,以 enum 關(guān)鍵字聲明:Wednesday = 2枚舉(續(xù))C# 中的枚舉包含與值關(guān)聯(lián)的數(shù)字 默認(rèn)情況下,將 0 值賦給枚舉的第一個(gè)元素,然后對(duì)每個(gè)后續(xù)的枚舉元素按 1 遞增在初始化過程中可重寫默認(rèn)值枚舉不能定義自己的方法、屬性或事件,枚舉不能實(shí)現(xiàn)接口。public enum WeekDaysMonday=1,Tuesday=2,Wednes
24、day=3,Thursday=4,Friday=52.結(jié)構(gòu)結(jié)構(gòu)是幾個(gè)數(shù)據(jù)組成的數(shù)據(jù)結(jié)構(gòu),它可以包含方法。 結(jié)構(gòu)聲明的語法規(guī)則如下:訪問修飾符 struct 結(jié)構(gòu)名 :實(shí)現(xiàn)的接口 結(jié)構(gòu)體 ;其中,內(nèi)容是可選的,訪問修飾符可以是public、private等關(guān)鍵字。結(jié)構(gòu)體的類型可以相同,也可以不同,甚至可以是其他的結(jié)構(gòu)類型。結(jié)構(gòu)(續(xù)) 定義: struct Point_self short x,y; struct RectArea Point_self LeftTop; Point_self RightBottoms; public void Drawing() 引用分量 p1.x=5; p1.y
25、=10; p2.x=p1.x; p2.y=p1.y+5; 說明職員信息的結(jié)構(gòu)2.5 數(shù)組與集合1.數(shù)組一維數(shù)組:說明:int MyIntArray; Point MyPointArray; 創(chuàng)建:int MyIntArray=new int5; Point MyPointArray= new PointarraySize;初始化: String MyFreandPhone= “0288540233”,”02885412222”,”01088774563”; 訪問數(shù)組的元素 :從0開始 MyIntArray1=10 Console.writeline(MyFreandPhon1); 多維數(shù)組:多
26、維數(shù)組說明: int, MyMatrix; int, My3Darray;多維數(shù)組創(chuàng)建:設(shè) Length ,width 是常量 int, MyMatrix= new intlength, width;多維數(shù)組初始化: int, MyMatrix=1,2,3,4,4,3,2,1,9,8,7,6;多維數(shù)組元素引用: MyMatrix2,3 3行4列的元素 數(shù)組(續(xù))2.數(shù)組運(yùn)算: 數(shù)組元素的遍歷:是指全部訪問數(shù)組中的元素一次且僅一次,C#提供了foreach語句以實(shí)現(xiàn)數(shù)組的遍歷功能,使用foreach語句可以訪問數(shù)組中的每個(gè)元素而不需要知道每個(gè)元素的下標(biāo)。查找數(shù)組元素:在數(shù)組中查找元素,可以有兩種
27、結(jié)果,一是從整個(gè)數(shù)組中尋找與給定值相同的元素,二是判斷數(shù)組中是否含有與給定值相同的元素。最常用查找方法有:順序檢索、二分檢索、使用System.Array.IndexOf方法檢索。數(shù)組排序:將數(shù)組中的元素值按遞增或遞減的次序排列。數(shù)組排序的算法有很多,常用的有選擇法、冒泡法、插入法、合并排序等。數(shù)組中元素的插入和刪除 ;集合集合是指一組類似的對(duì)象, C#提供了強(qiáng)大的集合操作能力。集合類似于數(shù)組,但是可以用筆數(shù)組更靈活、更有效的方式處理集合中的數(shù)據(jù)項(xiàng)。 1. 一般集合一般集合是常見的集合數(shù)據(jù)結(jié)構(gòu),包括以下幾種:列表(ArrayList):一個(gè)一維的動(dòng)態(tài)數(shù)組,可以裝載一組相似的數(shù)據(jù)元素;隊(duì)列(Qu
28、ene):先進(jìn)先出的列表;堆棧(Stack):先進(jìn)后出的列表;哈希表(Hashtable):集合中的每個(gè)元素都是一個(gè)對(duì)的列表;字典(DictionaryEntry):一個(gè)對(duì)。集合(續(xù))2.常見集合操作列表(ArrayList) :C#提供了實(shí)現(xiàn)列表(ArrayList)的常用屬性和方法,其說明如下所示:Capacity:獲取或設(shè)置ArrayList可包含的元素?cái)?shù)Count:獲取ArrayList中實(shí)際包含的元素?cái)?shù)Item:獲取或限制指定索引處的元素Add/AddRange:將對(duì)象添加到ArrayList的結(jié)尾處Clear:從ArrayList中移除所有元素Index/IndexRange:將元
29、素插入ArrayList的指定索引處Remove/RemoveRange:從ArrayList中移除特定對(duì)象Sort:對(duì)ArrayList或其中一部分的元素進(jìn)行排序隊(duì)列(Queue):C#提供了實(shí)現(xiàn)隊(duì)列(Queue)的常用屬性和方法,其說明如下所示:Count:獲取Queue中實(shí)際包含的元素?cái)?shù)Clear:從Queue中移除所有元素Enqueue:入隊(duì)操作Dequeue:出隊(duì)操作堆棧(Stack):C#提供了實(shí)現(xiàn)堆棧(Stack)的常用屬性和方法,其說明如下所示:Count:獲取Stack中實(shí)際包含的元素?cái)?shù)Clear:從Stack中移除所有元素Push:入棧操作Pop:出棧操作第3章 程序控制結(jié)
30、構(gòu)重點(diǎn)內(nèi)容了解順序結(jié)構(gòu)理解與應(yīng)用if和switch分支選擇語句理解與應(yīng)用while、do-while和for循環(huán)語句理解與應(yīng)用break和continue控制轉(zhuǎn)向語句3.1 順序結(jié)構(gòu)順序結(jié)構(gòu)就是各語句按出現(xiàn)的先后次序執(zhí)行。程序的執(zhí)行過程是:先執(zhí)行語句A,然后執(zhí)行語句B,最后執(zhí)行語句C。3.2 分支選擇結(jié)構(gòu)分支結(jié)構(gòu),顧名思義,是指程序進(jìn)入分支結(jié)構(gòu)后,面臨走哪一條路、執(zhí)行哪一條分支的選擇。選擇是通過對(duì)某一個(gè)條件進(jìn)行測(cè)試后做出的,條件往往由關(guān)系或邏輯表達(dá)式來描述。if語句1. 簡單if語句簡單if語句只在條件為真時(shí)執(zhí)行一個(gè)分支,當(dāng)條件為假時(shí)不做任何操作,其語法規(guī)則如下:if(布爾表達(dá)式)語句(組)其
31、執(zhí)行的流程右圖所示。2. if-else語句當(dāng)指定布爾表達(dá)式為真時(shí)執(zhí)行一個(gè)分支,當(dāng)條件為假時(shí)執(zhí)行另一個(gè)分支,其語法規(guī)則如下:if(布爾表達(dá)式)語句(組)else語句(組)其執(zhí)行的流程右圖所示。if語句(續(xù))3. 嵌套if語句if語句中包含其他if語句,則內(nèi)層的if語句嵌套在外層if語句中。內(nèi)層if語句又可以包含其他的if語句,這種嵌套的深度沒有限制,其語法規(guī)則如下:if(布爾表達(dá)式1)語句(組)else if(布爾表達(dá)式2)語句(組)else語句(組)其執(zhí)行的流程圖右圖所示。嵌套if語句可以實(shí)現(xiàn)多重選擇,但是使用嵌套if語句時(shí),太多層的if語句容易引起混亂,而且一定要注意if與else的匹配。
32、【例4-6】求分段函數(shù)的值。設(shè)有一個(gè)數(shù)學(xué)函數(shù)的表達(dá)式為:程序流程如圖所示。開始輸入變量x輸出結(jié)果x0?y1結(jié)束YesNoX0?y0y1YesNoswitch語句 witch語句實(shí)現(xiàn)多重條件選擇,其語法規(guī)則如下:switch(表達(dá)式)case 表達(dá)式值1:語句塊1;break;case 表達(dá)式值2:語句塊2;break;default:語句塊;break;其中,每個(gè)可能的分支都對(duì)應(yīng)著一個(gè)case語句,switch判斷表達(dá)式的值符合哪一個(gè)case語句中的表達(dá)式值,就執(zhí)行這個(gè)case語句對(duì)應(yīng)的分支,其執(zhí)行的流程圖所示。switch語句(續(xù))使用switch語句必須注意以下規(guī)則:表達(dá)式必須能計(jì)算出一個(gè)
33、char、byte、short或int型值;switch表達(dá)式的值與case表達(dá)式值必須是相同的數(shù)據(jù)類型;關(guān)鍵字break語句是可選的,編寫break語句可以避免編程錯(cuò)誤,提高代碼的可維護(hù)性;關(guān)鍵字default語句是可選的。3.3 循環(huán)結(jié)構(gòu)當(dāng)程序需要不停執(zhí)行某種功能,直到達(dá)到某種條件才停止,可以采用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)。循環(huán)中要重復(fù)執(zhí)行的語句塊稱為循環(huán)體,每個(gè)循環(huán)包含一個(gè)循環(huán)條件,它是控制循環(huán)體執(zhí)行的布爾表達(dá)式,每循環(huán)一次后都要重新計(jì)算循環(huán)條件。若條件為真,重復(fù)執(zhí)行循環(huán)體,若條件為假,終止循環(huán)。C#提供了4種循環(huán)語句:for循環(huán)語句、while循環(huán)語句、do-while循環(huán)語句和foreach循環(huán)語
34、句。for循環(huán)語句 for循環(huán)語句是最常見的一種循環(huán)結(jié)構(gòu),一般情況下,它使用一個(gè)變量來控制循環(huán)體的執(zhí)行次數(shù)和終止條件,其語法規(guī)則如下:for(初始化操作;循環(huán)條件;每次循環(huán)后的操作)語句塊; /循環(huán)體for語句小括號(hào)中的初始化操作、循環(huán)條件和每次循環(huán)后的操作都是用分號(hào)隔開,通常初始化操作初始化循環(huán)條件中的變量,每次循環(huán)后的操作增加或減少這個(gè)變量,而循環(huán)條件檢驗(yàn)這個(gè)變量是否達(dá)到終止值,其執(zhí)行的流程如圖所示。while循環(huán)語句 while循環(huán)語句是另一種常用的循環(huán)結(jié)構(gòu),它對(duì)于循環(huán)次數(shù)有限但又不知道具體次數(shù)的情況相當(dāng)有效,其語法規(guī)則如下。while(循環(huán)條件)語句塊; /循環(huán)體while循環(huán)語句的功
35、能是:當(dāng)給定的循環(huán)條件為真時(shí),執(zhí)行循環(huán)體,當(dāng)給定的循環(huán)條件為假時(shí),則終止循環(huán)。while循環(huán)語句不用知道循環(huán)體的循環(huán)次數(shù),相比if循環(huán)語句更加靈活,其程序流程如圖所示。使用while循環(huán)語句時(shí),應(yīng)該注意以下規(guī)則:while循環(huán)語句先對(duì)循環(huán)條件進(jìn)行計(jì)算,然后才決定是否執(zhí)行循環(huán)體,只有在循環(huán)條件為真時(shí)才執(zhí)行循環(huán)體。如果條件從開始就不成立,則一次循環(huán)體也不執(zhí)行;當(dāng)循環(huán)條件第一次出現(xiàn)為假時(shí),循環(huán)才能終止。do-while循環(huán)語句 do-while循環(huán)語句是while循環(huán)語句的變體,它跟while循環(huán)語句類似,當(dāng)循環(huán)條件為真時(shí),循環(huán)體就會(huì)不斷地重復(fù)執(zhí)行,當(dāng)循環(huán)條件為假時(shí),則終止循環(huán)、退出循環(huán)語句,其語法
36、規(guī)則如下:do語句塊; /循環(huán)體while(表達(dá)式);do-while循環(huán)語句是先執(zhí)行循環(huán)體后進(jìn)行循環(huán)條件判斷,所以do-while循環(huán)語句至少執(zhí)行一次循環(huán)體,其程序流程如圖所示。 foreach循環(huán)語句 foreach循環(huán)語句是一條新語句,該語句為數(shù)組或?qū)ο蠹现械拿總€(gè)元素重復(fù)一個(gè)嵌入語句組,它用于循環(huán)訪問集合以獲取所需信息,但不應(yīng)用于更改集合內(nèi)容以避免產(chǎn)生不可預(yù)知的副作用其語法規(guī)則如下:foreach(類型 變量名 in 集合對(duì)象)語句塊; /循環(huán)體嵌入語句為數(shù)組或集合中的每一個(gè)元素繼續(xù)執(zhí)行。當(dāng)集合中的所有元素完成循環(huán)后,終止并退出循環(huán)。常用算法 累加、連乘在循環(huán)結(jié)構(gòu)中,最常用的算法時(shí)累加
37、和連乘。累加是在原有的基礎(chǔ)上一次一次地每次加一個(gè)數(shù);連乘則是在原有乘的基礎(chǔ)上一次一次地每次乘以一個(gè)數(shù)。【例3.7】求自然對(duì)數(shù)e的近似值,要求其誤差小于0.00001,近似公式為e=1+1/1!+1/2!+1/3!+1/n!。 (程序見教材例3.7)2.求素?cái)?shù)素?cái)?shù),又稱為質(zhì)數(shù),是一個(gè)大于2的整數(shù),并且只能被1和本身整除,而不能被其他整數(shù)整除的數(shù)。判別某數(shù)n是否為素?cái)?shù)的方法很多,最簡單的是從素?cái)?shù)的定義求解,其算法思想是:對(duì)于m從i=2,3,n-1判別n能否被i整除,只要有一個(gè)能整除,n不是素?cái)?shù);否則n是素?cái)?shù)。【例3.8】求1000以內(nèi)的素?cái)?shù)。(程序見教材例3.8)3.4 控制轉(zhuǎn)向的語句C#為程序控
38、制結(jié)構(gòu)提供了4種不同的控制跳轉(zhuǎn)語句:break、continue、return和共同語句。在前面的循環(huán)結(jié)構(gòu)中,為了提供程序效率,需要強(qiáng)制跳出循環(huán),就必須使用控制跳轉(zhuǎn)語句。break語句break語句是用于立刻終止語句的執(zhí)行。在循環(huán)語句中,break語句用于包含它的最內(nèi)層循環(huán)。同樣地,它還可以用于中斷if語句和switch語句。當(dāng)程序執(zhí)行到break語句,程序跳轉(zhuǎn)到北終止執(zhí)行的語句后,其語法規(guī)則如下:break;continue語句continue語句與break語句一樣,可以實(shí)現(xiàn)跳轉(zhuǎn)。當(dāng)程序遇到continue語句后,結(jié)束當(dāng)前進(jìn)行的這次循環(huán),將程序控制轉(zhuǎn)移到循環(huán)體尾部,以便進(jìn)行下一次循環(huán)條件判
39、斷。continue語句與break語句的區(qū)別是,break語句終止整個(gè)循環(huán)的執(zhí)行,而continue語句只終止當(dāng)前這一次循環(huán)的執(zhí)行,其他的循環(huán)可以繼續(xù)進(jìn)行,其語法規(guī)則如下:continue;return語句return語句是終止包含它的方法的執(zhí)行,并將控制返回到主調(diào)函數(shù)繼續(xù)執(zhí)行,它返回時(shí)可附帶一個(gè)可選值。如果方法為void類型,則可以省略return語句,其語法規(guī)則如下:return;goto語句goto語句屬于無條件跳轉(zhuǎn)語句,C#語言支持代碼行加上標(biāo)簽,這樣就可使用goto語句直接跳轉(zhuǎn)到標(biāo)簽代表的語句上。goto語句一個(gè)好處就是可以保證程序存在唯一的出口,避免了過于龐大的if嵌套,但是由于
40、它是無條件跳轉(zhuǎn),可讀性差,所以建議只用在多重循環(huán)的跳出,其它情況盡量不用,其語法規(guī)則如下:goto 標(biāo)簽;goto語句(續(xù))【例4-10】goto語句的簡單應(yīng)用。using System;class Program static void Main(string args) goto h; w:Console .WriteLine (world!); return ; h:Console .Write (hello ); goto w; 程序的運(yùn)行效果如圖所示常用算法實(shí)例1.窮舉算法窮舉也稱為枚舉,是最常用的算法之一,它的基本思想是一一列舉各種可能進(jìn)行測(cè)試,從中找出符合條件的解。計(jì)算機(jī)能夠?qū)崿F(xiàn)
41、高速運(yùn)算,是由于它借助于循環(huán)結(jié)構(gòu)實(shí)現(xiàn)窮舉,它比人工操作更為有效。【例3.9】用窮舉算法,在5行中顯示自然數(shù)中的前50個(gè)素?cái)?shù),并按一行十個(gè)素?cái)?shù)輸出。namespace _3._9 class Program static void Main(string args) int count = 0, number = 2; bool isPrime = true; Console.WriteLine(自然數(shù)中前50個(gè)素?cái)?shù)列表為:); while (count 50) isPrime = true; /判斷是否為素?cái)?shù) for (int j = 2; j = (int)(Math.Sqrt(number
42、); j+)/減小窮舉的規(guī)模 if (number % j = 0) isPrime = false; break; if (isPrime=true) count = count +1; if (count % 10 = 0) Console.WriteLine(number); else Console.Write(number + ); number+; 程序運(yùn)行結(jié)果如圖所示。常用算法實(shí)例(續(xù))2.迭代算法迭代就是不斷由已知值推出新值,直到求解為止。顯然,迭代算法是利用計(jì)算機(jī)的高速運(yùn)算能力和循環(huán)程序來實(shí)現(xiàn)的。一般來說迭代由3個(gè)環(huán)節(jié)組成:迭代初始值迭代公式迭代終止條件【例3.10】用迭代算
43、法計(jì)算:20+21+22+263。namespace _3._10 class Program static void Main(string args) float t = 1, s = 0;/迭代初始條件 for (int i = 0; i “逐語句”開始單步執(zhí)行程序,程序首先暫停在主函數(shù)的第一行,使用快捷鍵F10或F11單步執(zhí)行程序。F10與F11的區(qū)別是:F10可以跳過一行代碼中所調(diào)用的方法。2.設(shè)置斷點(diǎn):單VS 2008提供了設(shè)置斷點(diǎn)解決大規(guī)模程序差錯(cuò)。在設(shè)置斷點(diǎn)時(shí),首先把光標(biāo)放置指定的地方,使用快捷鍵F9或Ctrl+B,或者選擇“調(diào)試”“新建斷點(diǎn)”,如圖下所示。設(shè)置斷點(diǎn)后,選中這個(gè)
44、斷點(diǎn),右鍵單擊該斷點(diǎn),選擇“條件”選項(xiàng),即可出現(xiàn)右圖所示的設(shè)置“斷點(diǎn)條件”窗口。設(shè)置斷點(diǎn)條件完成后,單擊調(diào)試按鈕或使用快捷鍵F5,運(yùn)行程序,當(dāng)程序運(yùn)行到指定的斷點(diǎn)位置,并滿足斷點(diǎn)暫停條件時(shí),代碼會(huì)暫停運(yùn)行,此時(shí)就可以使用單步執(zhí)行方式來仔細(xì)觀察程序的運(yùn)行狀態(tài),找出程序的錯(cuò)誤地點(diǎn)。4.3 捕獲異常C#中可以使用try-catch語句來捕獲程序拋出的異常,其語法規(guī)則如下所示:try處理代碼;catch(異常) /捕獲異常捕獲異常;4.4 異常處理當(dāng)出現(xiàn)異常后,C#用try-catch語句捕獲異常,它還提供了對(duì)異常處理的內(nèi)建支持,即通過try-catch語句、try-catch-finally句語和t
45、hrow語句實(shí)現(xiàn)結(jié)構(gòu)化、統(tǒng)一化的類型安全的異常處理。try-catch語句在try-catch語句中,try語句會(huì)捕獲到程序出現(xiàn)的異常,然后將程序控制轉(zhuǎn)移到相應(yīng)的catch語句中。如果try語句沒有遇到任何異常,則程序直接執(zhí)行try-catch語句后面的代碼。一個(gè)try-catch語句中,可以使一個(gè)try語句后匹配一個(gè)或多個(gè)catch語句,程序根據(jù)try語句指定的異常類型與catch語句中指定的異常類型匹配關(guān)系,執(zhí)行相應(yīng)的catch語句。try-catch-finally語句在try-catch-finally語句中,無論是否出現(xiàn)異常,是否有catch語句,finally語句一定會(huì)執(zhí)行,其語法
46、規(guī)則如下所示:try處理代碼;catch(異常) /捕獲異常捕獲異常;finally代碼塊;throw語句throw語句用于拋出在程序執(zhí)行期間出現(xiàn)異常情況的信號(hào)。throw語句通常與try-catch或者try-catch-finally語句配合使用。開發(fā)人員可以使用throw語句顯示拋出異常(即開發(fā)人員自定義的異常)。不捕捉異常的后果捕捉C#的標(biāo)準(zhǔn)異常是有副作用的:它避免了異常的程序終止。捕捉一個(gè)異常時(shí),必須由某些地方的代碼片來捕捉。通常,如果程序不捕捉異常,那么將由C#運(yùn)行時(shí)系統(tǒng)來捕捉異常。此時(shí)存在一個(gè)問題,運(yùn)行時(shí)系統(tǒng)將報(bào)告錯(cuò)誤并終止程序的運(yùn)行。4.5 常用異常在C#中,異常用類來表示。所
47、有異常類都必須從內(nèi)部異常類Exception派生而來,而Exception是System名字空間的一部分。因此,所有異常都是Exception的子類。SystemException和ApplicationException都是從Exception派生而來,它們支持C#定義的兩類常規(guī)異常:C#運(yùn)行時(shí)系統(tǒng)(即通用語言運(yùn)行時(shí)CLR)產(chǎn)生的異常,以及應(yīng)用程序產(chǎn)生的異常。SystemException和ApplicationException都未給Exception添加新內(nèi)容,它們只是定義兩個(gè)不同異常層次結(jié)構(gòu)的頂層。C#定義了許多內(nèi)部異常,它們都是從System.Exception派生而來。例如,試圖以
48、0為除數(shù)時(shí),產(chǎn)生的DivideByZeroException異常。System名字空間定義了一些標(biāo)準(zhǔn)的內(nèi)部異常。產(chǎn)生運(yùn)行時(shí)錯(cuò)誤時(shí),CLR產(chǎn)生這些異常,所以它們都是從SystemException派生而來。C#定義的常用標(biāo)準(zhǔn)異常如下所示。第5章 C#面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)重點(diǎn)內(nèi)容理解面向?qū)ο缶幊痰奶攸c(diǎn)掌握類與對(duì)象、接口掌握抽象類與抽象方法理解密封類與密封方法理解迭代器、分部類和索引器掌握運(yùn)算符重載5.1 類與對(duì)象在比較傳統(tǒng)的面向過程的應(yīng)用程序開發(fā)中,程序是由一系列過程或函數(shù)的模塊組成的可執(zhí)行的實(shí)體,每個(gè)模塊執(zhí)行某個(gè)特定的功能,面向過程編程能很好地解決小型的、具體的問題;但面對(duì)復(fù)雜的大系統(tǒng),它卻無法
49、勝任,因而迫使人們?nèi)で蠼鉀Q大型的復(fù)雜系統(tǒng)的新方法。在這種背景下,產(chǎn)生了面向?qū)ο蟮木幊碳夹g(shù)。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蹋∣bject-Oriented Programming,簡稱OOP)是開發(fā)應(yīng)用程序的一種新方法、新思想,他提出了一種全新的程序設(shè)計(jì)風(fēng)格,以數(shù)據(jù)為核心,其編程單元是類,對(duì)象最終由類實(shí)例化。面向?qū)ο蠹夹g(shù)具有三個(gè)重要的特點(diǎn):封裝(Encapsulation):把數(shù)據(jù)與對(duì)數(shù)據(jù)進(jìn)行的操作封閉在類內(nèi),其它對(duì)象可通過接口訪問封裝的內(nèi)容。增加了安全性。繼承(Inheritance):使一個(gè)類可以獲得先前已定義類的全部特征,增強(qiáng)了代碼的可重用性,提高了開發(fā)效率。多態(tài)(Polymorphism):
50、指調(diào)用相同的函數(shù)名時(shí),可導(dǎo)致完全不同的行為,增加了程序和靈活性。類類是面向?qū)ο箝_發(fā)方法的基本成分,簡單地說,類是一種數(shù)據(jù)結(jié)構(gòu),它是具有相同屬性和行為的一組對(duì)象的集合,用于模擬現(xiàn)實(shí)中存在的對(duì)象和關(guān)系。1 定義類類定義的語法規(guī)則如下所示:訪問修飾符 class 類名類的成員變量和方法;2.定義類的成員變量和局部變量類體中定義的變量成為成員變量,類的方法中定義的變量成為局部變量。成員變量在整個(gè)類中有效,局部變量只在定義它的方法中有效。關(guān)鍵字static修飾的是類變量,沒有static修飾是實(shí)例變量。類變量也稱為靜態(tài)變量,實(shí)例變量又稱為非靜態(tài)變量。程序運(yùn)行期間,靜態(tài)變量的內(nèi)存單位不會(huì)被其他變量占用,不
51、同對(duì)象的同名靜態(tài)變量占據(jù)同一個(gè)內(nèi)存單元,因此靜態(tài)變量的值在其中一個(gè)對(duì)象中發(fā)生變化,則這個(gè)變化在另外一個(gè)對(duì)象使用這個(gè)靜態(tài)變量時(shí)是有影響的。靜態(tài)變量是由類直接調(diào)用的,由類實(shí)例化的對(duì)象不能調(diào)用靜態(tài)變量,它通常用于處理需要統(tǒng)計(jì)類的所有對(duì)象信息或者是此類對(duì)象之間的相互作用的信息,是針對(duì)于類所實(shí)例化的所用對(duì)象。類(續(xù))3.定義方法方法是用于是想可由該類執(zhí)行的計(jì)算和操作,是包含一系列語句的代碼塊。在C#中,方法包括四種:(1) 構(gòu)造方法在各式各樣的方法中有一種特殊的方法,稱為構(gòu)造方法,這是每個(gè)類都有的方法,類似于C語言中的構(gòu)造函數(shù)。構(gòu)造方法有以下特點(diǎn):構(gòu)造方法的名稱必須與類名相同。構(gòu)造方法必須是void型的
52、(但是void可以省略不寫),即沒有返回值。在創(chuàng)建某個(gè)類時(shí)系統(tǒng)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的構(gòu)造方法。如果沒有定義顯式的構(gòu)造方法,系統(tǒng)將按照默認(rèn)構(gòu)造方法的需要分配內(nèi)存。如果編程人員定義了顯式構(gòu)造方法,則按照顯式構(gòu)造方法的需要分配內(nèi)存,其定義的語法規(guī)則如下所示: void 類名(參數(shù)1,參數(shù)2,)方法體;類(續(xù))(2)析構(gòu)方法析構(gòu)方法是相對(duì)與構(gòu)造方法而言的,它是用來實(shí)現(xiàn)析構(gòu)一個(gè)類實(shí)例所需的操作,指定了當(dāng)銷毀該類的一個(gè)實(shí)例時(shí)所需要執(zhí)行的操作。析構(gòu)方法有以下特點(diǎn):析構(gòu)函數(shù)聲明方式與構(gòu)造函數(shù)的相同只是在類名前加個(gè)()符號(hào)析構(gòu)函數(shù)不接受任何參數(shù),不帶任何反問修飾符。一個(gè)類只能有一個(gè)析構(gòu)函數(shù)。析構(gòu)函數(shù)不能重載析構(gòu)函數(shù)
53、不能顯式或手動(dòng)調(diào)用,只有在該類被銷毀的時(shí)候調(diào)用由于以上特點(diǎn),一般析構(gòu)方法寫的都是一些資源回收之類的東西,如關(guān)閉數(shù)據(jù)庫、關(guān)閉文件、關(guān)閉網(wǎng)絡(luò)連接等操作,其定義的語法規(guī)則如下所示: void 類名(參數(shù)1,參數(shù)2,)方法體;類(續(xù))(3) 靜態(tài)方法靜態(tài)方法是用static關(guān)鍵字標(biāo)識(shí)的方法,它不能作用于具體的實(shí)例,只能由類直接調(diào)用,其定義的語法規(guī)則如下所示: static 方法名(參數(shù)1,參數(shù)2,)方法體; (4)實(shí)例方法沒有static修飾的是實(shí)例方法,它只能被實(shí)例化的對(duì)象調(diào)用,請(qǐng)定義的語法規(guī)則如下所示: 方法名(參數(shù)1,參數(shù)2,)方法體;對(duì)象 對(duì)象是面向?qū)ο蟮幕境煞郑瑢?duì)象包含變量成員和方法,它所
54、包含的變量組成了存儲(chǔ)在對(duì)象中的數(shù)據(jù),而其包含的方法可以訪問對(duì)象的變量。略為復(fù)雜的對(duì)象可能不包含任何數(shù)據(jù),而只包含方法,并使用方法表示一個(gè)操作。 C#中的對(duì)象是類的定義實(shí)例化,這標(biāo)識(shí)對(duì)象是類創(chuàng)建的一個(gè)實(shí)例,“類的實(shí)例”和對(duì)象標(biāo)識(shí)相同的概念,但是類和對(duì)象是完全兩個(gè)不同的概念。對(duì)象(續(xù))1.對(duì)象的聲明和實(shí)例化C#中要求使用對(duì)象前,必須聲明和實(shí)例化該對(duì)象,其語法規(guī)則如下所示:類名 對(duì)象名 = new 構(gòu)造方法(參數(shù)列表);在例5.6中,程序定義了兩個(gè)不同的類,主類中用語句:cat cat1 = new cat(4, 1); 2.類與對(duì)象的關(guān)系 類就是一種抽象的數(shù)據(jù)類型,但是其抽象的程度可能不同,而對(duì)象
55、就是一個(gè)類的實(shí)例。 類和對(duì)象的區(qū)別:類是具有相同或相似結(jié)構(gòu)、操作和約束規(guī)則的對(duì)象組成的集合,而對(duì)象是某一類的具體化實(shí)例,每一個(gè)類都是具有某些共同特征的對(duì)象的抽象。5.2 類的繼承繼承性是軟件復(fù)用的一種形式,是面向?qū)ο缶幊痰年P(guān)鍵技術(shù)之一。新類由已存在的類生成。軟件復(fù)用可縮短軟件開發(fā)的時(shí)間,復(fù)用那些已證實(shí)并經(jīng)過調(diào)試的高質(zhì)量的軟件,可以提高系統(tǒng)的性能,減少系統(tǒng)在使用過程中出現(xiàn)的問題。當(dāng)用戶建立一個(gè)新類時(shí),不必全部寫出所有的實(shí)例變量和實(shí)例方法,只需聲明該類繼承已定義過的“父類”(也叫基類、超類)的實(shí)例變量和實(shí)例方法,這個(gè)新類就稱作“子類”,每個(gè)子類也可以成為其他某個(gè)子類的父類。一個(gè)類可以繼承另一個(gè)類,
56、被繼承的類稱為父類,繼承的類稱為子類。子類可以繼承父類所有的非私有(private)成員作為自己的成員。除繼承來的成員外,子類還可以創(chuàng)建自己的成員。類的繼承(續(xù))1.成員訪問和繼承 類成員往往聲明為私有的,以避免對(duì)它們進(jìn)行未授權(quán)的使用或破壞。繼承類并不違反私有訪問限制。 訪問權(quán)限是由關(guān)鍵字public、private、protected,internal設(shè)定的??梢苑旁赾lass前面修飾類的修飾符關(guān)鍵字只有public和internal,如果沒寫任何關(guān)鍵字,默認(rèn)是internal。其中用internal修飾的類,只有在同一程序集內(nèi),該類才可以被訪問到;而用public修飾的類,可以在任何地方訪
57、問此類。如果父類的變量和方法被修飾為public,則這些變量和方法是共有的,可以在子類中通過對(duì)象進(jìn)行訪問。如果父類的變量和方法被修飾為private,則這些變量和方法是私有的,不能在子類中通過對(duì)象進(jìn)行訪問。如果父類的變量和方法被修飾為protected,則這些變量和方法是受保護(hù)的,它和private的權(quán)限很相似,唯一不同的是protected類型成員可以被子類繼承,而private類型成員不可以被繼承。 類的繼承(續(xù))2.構(gòu)造函數(shù)和繼承在層次化結(jié)構(gòu)中,父類和子類都有自己的構(gòu)造函數(shù),這樣會(huì)引起一個(gè)重要的問題:哪個(gè)構(gòu)造函數(shù)承擔(dān)建立子類對(duì)象的任務(wù),是父類的構(gòu)造函數(shù)還是子類的構(gòu)造函數(shù)。其答案是子類的構(gòu)
58、造函數(shù)建造對(duì)象的父類部分,而子類的構(gòu)造函數(shù)建造對(duì)象的子類部分。這是合理的,因?yàn)楦割惒恢酪膊荒茉L問子類的元素。因此,其構(gòu)造函數(shù)必須分開。 5.3 接口接口和類一樣,可以有方法、屬性等成員。但與類不同的是,接口僅僅提供的聲明,并不允許提供成員的實(shí)現(xiàn),接口成員只能在具體的類或結(jié)構(gòu)代碼中實(shí)現(xiàn),其定義的語法規(guī)則如下所示:訪問修飾符 interface 接口標(biāo)識(shí)符 :接口基接口體;聲明接口后,類可以通過繼承接口來實(shí)現(xiàn)其中的方法。繼承接口的語法同繼承類語法類似,使用冒號(hào)“:”,將要繼承的接口放在類的后面,如果要繼承多個(gè)接口,使用逗號(hào)“,”將其分開。在實(shí)現(xiàn)接口的類中使用接口中聲明的方法時(shí),創(chuàng)建的方法體的名稱
59、、返回類型和參數(shù)必須和接口中聲明的完全一致。 5.4 抽象類與抽象方法抽象方法是只包含方法定義,但沒有具體實(shí)現(xiàn)的方法,它需要其子類類具體實(shí)現(xiàn),使用關(guān)鍵字abstract修飾的方法。抽象類是用關(guān)鍵字abstract修飾的類,它含有一個(gè)或多個(gè)抽象成員。抽象類不能夠被實(shí)例化,因?yàn)樗藳]有具體實(shí)現(xiàn)的方法。其語法規(guī)則如下所示:訪問修飾符 abstract class 抽象類名抽象屬性;抽象方法;抽象類是特殊的類,具有以下特殊特征:抽象類不能實(shí)例化抽象類可以包含抽象方法和抽象訪問器抽象類派生出的非抽象類必須包括繼承所有抽象方法和抽象訪問器的實(shí)現(xiàn),而且必須使用override修飾符的屬性聲明重寫抽象方法
60、和抽象訪問器。如果父類被聲明為抽象類,并存在未實(shí)現(xiàn)的抽象方法,那么子類就必須實(shí)現(xiàn)父類中所有的abstract成員,否則子類也是一個(gè)抽象類。抽象方法是特殊的方法,只能被包含在抽象類中。包含抽象方法的類必須定義為抽象類,否則編譯程序時(shí)報(bào)錯(cuò),但抽象類不一定要包含抽象方法。接口與抽象類區(qū)別從語法和功能方法看,接口與抽象類都非常相似。它們都是提供成員的聲明,都不能實(shí)例化,但是它們之間也存在著很多的差別:在抽象類中可以有非抽象方法和抽象方法,但在接口中只有抽象方法,它是抽象類的變體。類可以繼承多個(gè)接口,但僅能從一個(gè)抽象類繼承。從抽象類派生的類仍可實(shí)現(xiàn)接口??梢栽趧?chuàng)建組件時(shí)使用抽象類,因?yàn)樗鼈兪鼓靡栽谀承?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國讀寫器行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年聚甲醛制品項(xiàng)目投資價(jià)值分析報(bào)告
- 2024年度海洋動(dòng)物運(yùn)輸與野生動(dòng)物保護(hù)合作合同3篇
- 2024版農(nóng)業(yè)科技園成立出資及合作開發(fā)合同3篇
- 2024版船舶運(yùn)輸與船舶燃料供應(yīng)合同3篇
- 2024年度學(xué)位使用權(quán)出租與轉(zhuǎn)讓合同3篇
- 2024版國際貨物檢驗(yàn)檢疫合同3篇
- 2024版紅磚行業(yè)人才培養(yǎng)基地建設(shè)合同人力資源合作項(xiàng)目協(xié)議3篇
- 山東省寧陽市2025屆高三一診考試數(shù)學(xué)試卷含解析
- 2025屆江蘇省鹽城市重點(diǎn)中學(xué)高三第五次模擬考試數(shù)學(xué)試卷含解析
- 安全教育年度計(jì)劃養(yǎng)老院
- 機(jī)電一體化技術(shù)《智能煤礦采掘設(shè)備操作與檢修》課程標(biāo)準(zhǔn)
- (正式版)YST 1691-2024 鋁用預(yù)焙陽極行業(yè)綠色工廠評(píng)價(jià)要求
- 社會(huì)實(shí)踐-形考任務(wù)三-國開(CQ)-參考資料
- 山東省煙臺(tái)市2023-2024學(xué)年高二上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- MOOC 大學(xué)計(jì)算機(jī)-西安交通大學(xué) 中國大學(xué)慕課答案
- 內(nèi)鏡室院感知識(shí)培訓(xùn)
- 吃動(dòng)平衡知識(shí)講座
- 大屏實(shí)施方案
- 湖北省部分學(xué)校2023-2024學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試題(解析版)
- 工程建設(shè)監(jiān)理公司薪酬管理制度
評(píng)論
0/150
提交評(píng)論