




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第3章 C#面向?qū)ο蠡A(chǔ),面向?qū)ο缶幊痰挠⑽暮喎Q是OOP(Object Oriented Programming),該項技術(shù)是目前運用最廣泛的程序化設(shè)計方法,幾乎已經(jīng)完全取代了過去的面向過程編程。C#從一誕生開始,就是為面向?qū)ο缶幊趟鶞?zhǔn)備的。類是面向?qū)ο缶幊痰暮诵牟考?,它描述了一組具有相同特性和行為的對象?;诿嫦?qū)ο蟮膽?yīng)用程序,就是由幾個或幾十個甚至更多的類組成,且類之間總是保持著或多或少的關(guān)系。,3.1 類的基本概念,在C#中,類可以看成是一種數(shù)據(jù)結(jié)構(gòu),它自身封裝了數(shù)據(jù)成員和函數(shù)成員等。其中數(shù)據(jù)成員包括字段、常量和域等,而函數(shù)成員主要包括方法、屬性、事件、索引器和操作符等。本節(jié)將對類的結(jié)構(gòu)
2、和用法進行詳細(xì)說明。,3.1.1 C#中的類定義,在C#中,用class關(guān)鍵字來定義類,基本結(jié)構(gòu)如下所示。,3.1.2 字段,字段實際上相當(dāng)于類的變量,它在類中的應(yīng)用十分廣泛,看一個簡單的例子,如下面代碼所示。,3.1.3 常量,常量在類中所處的地位和字段差不多,只是它不可變而已。通常,定義常量用關(guān)鍵字const,如下面代碼所示。 public const int age = 25;,3.1.4 域,域的聲名過程和字段比較相似,但它們之間有一個很重要的區(qū)別,即域只能聲明在類的內(nèi)部,而不能聲名在類的方法的內(nèi)部。域分為實例域和靜態(tài)域,實例域只能通過類的實例進行調(diào)用,而靜態(tài)域可以直接通過類名進行調(diào)用
3、。,3.1.5 類的方法,在C#中,方法的定義與其他語言一樣,包括三個部分,分別為訪問修飾符、輸入?yún)?shù)和返回類型。方法的訪問修飾符的類型和類的差不多,如下表所示。,3.1.6 類的屬性,類的屬性提供比較靈活的機制來讀取、編寫或計算私有字段的值,可以像使用公有數(shù)據(jù)成員一樣使用屬性。屬性必須要由訪問器進行讀寫,它的一般聲明格式如下所示。,3.1.7 類的索引器,索引器是C#所特有的類成員,它的主要作用是對象能向數(shù)組一樣被方便地引用。索引器的聲明與屬性的聲明比較類似,如下所示。,3.1.7 類的索引器,索引器具有以下特點。 (1)索引器沒有具體的名字,需要用this關(guān)鍵字對對象進行索引。this關(guān)鍵
4、字指向被訪問成員所在的當(dāng)前實例,可以在構(gòu)造函數(shù)和實例方法中實現(xiàn)對成員的訪問,但不能訪問靜態(tài)成員。 (2)索引器不能定義為靜態(tài)的。 (3)索引器的參數(shù)index只能是傳值類型,不能出現(xiàn)ref和out關(guān)鍵字。,3.1.8 類的構(gòu)造函數(shù)和析構(gòu)函數(shù),類的構(gòu)造函數(shù)能被編譯器自動執(zhí)行,它具有以下特點。 (1)構(gòu)造函數(shù)必須與類同名。 (2)構(gòu)造函數(shù)不能有返回類型。 (3)當(dāng)訪問一個類時,它的構(gòu)造函數(shù)最先被執(zhí)行。 (4)一個類可以有多個構(gòu)造函數(shù),如果沒有定義構(gòu)造函數(shù),系統(tǒng)會自動生成一個默認(rèn)的構(gòu)造函數(shù)。,3.1.9 事件,事件相關(guān)知識的內(nèi)容太多,在本章的后面部分將用單獨一節(jié)進行講解。,3.2 Visual St
5、udio中的類向?qū)?在VS2010中,提供了創(chuàng)建類和類的成員的快捷方式,在本節(jié)中將通過例子進行詳細(xì)說明。 圖 程序運行結(jié)果,3.3 事件和委托,事件是C#中的又一個重要概念,它的定義如下所示。在發(fā)生其他類或?qū)ο笮枰P(guān)注的事情時,本類或?qū)ο罂梢酝ㄟ^事件來通知它們。發(fā)送事件的類稱為事件的發(fā)送者,而接收事件的類稱為事件的訂閱戶。,3.3.1 委托,委托是事件應(yīng)用過程中必不可少的一個環(huán)節(jié),委托首先是在Visual J+中提出的,后來被C#引用。如果一個類需要調(diào)用另一個類的方法,可以有三種方式,即實例方式、靜態(tài)方式和委托方式。應(yīng)用委托調(diào)用方法的流程如圖所示。 圖 委托使用流程圖,3.3.2 委托的事件處
6、理程序,前面提到,事件需要訂閱者,當(dāng)事件發(fā)生時,訂閱者會給出相應(yīng)的事件處理程序。事件處理程序本身是簡單的函數(shù)形式,它的參數(shù)和返回類型必須和調(diào)用它的委托相匹配。委托在這里的作用是包含事件處理程序,當(dāng)事件被觸發(fā)時,通過委托來執(zhí)行事件處理程序。,3.3.3 委托中的GUI事件,總的來說,事件具有以下特點。 (1)事件的發(fā)送者決定何時發(fā)送事件,事件的訂閱者決定執(zhí)行何種操作來響應(yīng)事件。 (2)一個事件可以同時有多個訂閱者,一個訂閱者可以響應(yīng)多個事件。 (3)沒有訂閱者的事件不會被調(diào)用。 (4)具有多個訂閱者的事件被觸發(fā)時,會同步調(diào)用多個事件處理程序。 (5)在.NET Framework中,事件是基于E
7、ventHandler委托和EventArgs基類的。,3.4 面向?qū)ο蟮奶卣?面向?qū)ο笾饕哂腥筇卣?,即繼承、多態(tài)和封裝。正因為這些機制的存在,才使得應(yīng)用程序變得更為簡單和豐富多彩。本節(jié)將對以上三個特征進行詳細(xì)介紹,此外還會提到面向?qū)ο笾辛硪粋€重要知識點重載。,3.4.1 繼承,繼承是指一個類A能利用另一個類B的資源(包括屬性和方法等),其中B類被稱為基類(或父類),而A類被稱為派生類(或子類)。繼承的使用語法如下所示。 (1)大多數(shù)而并非所有類都可以作為基類被繼承,比如帶有sealed修飾符的密封類不能被繼承。 (2)基類中只有兩種成員能被派生類訪問,包括public和protected
8、類型的成員。其中,protected類型是專為派生類設(shè)計的,該類型的成員只能在派生類中進行訪問。 (3)在派生類中可以修改基類中的以下成員,包括虛擬成員(virtual)和抽象成員(abstract)。其中對虛擬成員的修改是在派生類中重寫該成員的執(zhí)行代碼;而對于抽象成員而言,它在基類中,沒有執(zhí)行代碼,需要在派生類中進行添加。,3.4.2 多態(tài),多態(tài)是面向?qū)ο蟮挠忠粋€重要特征,它主要是指同一操作(如方法)作用于不同的類的實例,將產(chǎn)生不同的結(jié)果。多態(tài)主要是通過在派生類中對基類中的成員進行替換或重定義完成。,3.4.3 封裝,封裝是指將對象的信息進行隱藏,而只是提供一個訪問接口,使它的使用者無法看到
9、對象的具體信息。在類中,通過不同的修飾符能讓類的成員實現(xiàn)公開或隱藏。通過這些修飾符,類實現(xiàn)了很好的封裝。,3.4.4 重載,重載是面向?qū)ο笾谐筇卣魍獾挠忠粋€重要知識點,它是指在類中同名成員的不同定義。它的主要作用是使程序邏輯更加清晰。重載主要包括方法重載和運算符重載,本節(jié)將通過例子對這兩者進行詳細(xì)介紹。,3.4.5 方法重載,方法重載是C#中運用最廣泛的一種重載方式,它是指在類中建立名稱相同但參數(shù)不同的方法。方法重載主要是為了解決操作同一類對象需要使用不同方法的問題,如計算一類圖形的面積。圖形中包括矩形、圓和橢圓,它們的面積計算公式是不同的,這里就需要用到重載的概念。,3.4.6 運算符重
10、載,運算符重載主要是為了在類中擴展運算符的功能,以完成一些特殊的操作。重載運算符需要用到operator關(guān)鍵字。 在運算符重載的使用過程中,應(yīng)注意以下情況。 (1)并非所有運算符都能被重載,不能被重載的運算符包括“=”、“?:”、“-”、“new”、“is”、“sizeof”和“typeof”。 (2)重載運算符不能改變原來運算符的優(yōu)先級和操作數(shù)。 (3)比較運算符必須成對重載,如“=”和“!=”,“”和“”等。 (4)重載運算符可由派生類繼承。,3.5 接口,接口是面向?qū)ο笾械挠忠粋€重要概念,它用于定義類或結(jié)構(gòu)的行為特征。接口包含事件、方法、屬性和索引器4種成員,它只包含這些成員的簽名而不包
11、含實現(xiàn),這一點和抽象類比較相似;而且接口不能包含字段,且它的所有成員都必須是公開的。,3.5.1 接口的聲明,接口的聲明需要采用interface關(guān)鍵字,如下所示。,3.5.2 接口的使用,前面提到,接口只能包含成員的簽名,不能包含成員的實現(xiàn)。接口成員必須要在繼承該接口中的類中才能實現(xiàn)。 上面代碼中,實現(xiàn)了接口MyInterface中的MyMethod()方法并完成輸出。在使用接口時,應(yīng)注意以下問題。 (1)接口自身不能被實例化,需要在繼承它的類中才能使用。 (2)接口不能包含字段。 (3)接口不能包含靜態(tài)成員。 (4)接口成員默認(rèn)是public類型的,不能在接口成員前面加任何修飾符。 (5)
12、類和結(jié)構(gòu)可以從多個接口繼承。 (6)接口本身也可以從其他接口繼承,它的繼承機制和類的繼承機制一樣。,3.6 面向?qū)ο蟮钠渌黝},本章前面部分以類為重點介紹了面向?qū)ο蟮南嚓P(guān)知識,但僅有類是不夠的,面向?qū)ο筮€有一些其他主題,比如命名空間等。在本節(jié)中,將對面向?qū)ο笾衅渌恍┲黝}進行介紹,以幫助讀者更好地理解面向?qū)ο蟮谋举|(zhì)。,3.6.1 命名空間,在.NET Framework中,一個命名空間就是一個邏輯的命名系統(tǒng),它用于指定一個范圍,并在該范圍組織代碼(包括類、接口、結(jié)構(gòu)體和枚舉等)。命名空間在前面的代碼中已經(jīng)多次用到,如果需要使用包含在命名空間中的類,則需要使用using指令包含該命名空間,如下所
13、示。,3.6.2 程序集,程序集是.NET Framework應(yīng)用程序的基本構(gòu)造塊,當(dāng)生成C#應(yīng)用程序時,VS會在當(dāng)前工程的Debug目錄下生成可移植可執(zhí)行的文件,通常是.exe或.dll文件。在較大的項目中,程序集的作用是十分明顯的。項目經(jīng)理可以把項目劃分成幾個單獨的模塊,由不同的人員進行開發(fā),然各自生成程序集,最后通過一定的方式將這些程序集組合起來即可。 程序集具有以下特點。 (1)程序集以.exe或.dll格式的文件存在。 (2)能在多個應(yīng)用程序之間實現(xiàn)程序集的共享。 (3)在單個應(yīng)用程序中可以使用程序集的兩個版本。,3.6.3 類庫,在.NET Framework中,類庫是由命名空間組成,同時又是類、接口和值類型組成的庫,這些庫能對系統(tǒng)功能進行訪問,是建立.NET Framework應(yīng)用程序、組件和控件的基礎(chǔ)。.NET Framework中包含了大量的系統(tǒng)類庫供用戶使用,調(diào)用這些類庫時,系統(tǒng)會自動添加,只需用using指令包含類庫提供的命名空間即可,比如前面經(jīng)常使用的System命名空間。 但系統(tǒng)提供的類庫有時候并不能完全滿足用戶的要求,此時就需要自定義類庫。下面通過例子說明類庫的編寫和調(diào)用。,3.7 小結(jié),本章主要介紹了面向?qū)ο蠹夹g(shù)的基本內(nèi)容。首先是類的相關(guān)知識的介紹,類是面向?qū)ο蠹夹g(shù)中最基礎(chǔ)也是最重要的內(nèi)容,本章分別從類的定義、類的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市場開發(fā)收購協(xié)議
- 網(wǎng)絡(luò)平臺開發(fā)協(xié)議簽訂要點與
- 環(huán)境評估報告書與專家顧問團隊咨詢協(xié)議
- 浙江省寧波市三鋒教研聯(lián)盟2024學(xué)年高一下學(xué)期期末聯(lián)考?xì)v史試卷(含答案)
- 六年級書信爸爸媽媽我想對您說650字(9篇)
- 商業(yè)房產(chǎn)長期租賃合同
- 回遷房屋購房協(xié)議
- 2025年生態(tài)公園規(guī)劃初步設(shè)計評估報告:生態(tài)公園與文化遺產(chǎn)保護結(jié)合
- 2025年嬰幼兒配方食品營養(yǎng)配方優(yōu)化與行業(yè)政策解讀報告
- 二零二五年度珠寶首飾常規(guī)銷售合同
- 漏肩風(fēng)(肩周炎)中醫(yī)臨床路徑及入院標(biāo)準(zhǔn)2020版
- 光面爆破知識講座課件
- 工程結(jié)構(gòu)檢測鑒定與加固第1章工程結(jié)構(gòu)檢測鑒定與加固概論課件
- 高鐵站裝飾裝修方案
- DB4401-T 112.1-2021 城市道路占道施工交通組織和安全措施設(shè)置+第1部分:交通安全設(shè)施設(shè)置-(高清現(xiàn)行)
- 質(zhì)量整改通知單(樣板)
- 杭州市高級中學(xué)2022年高一新生素質(zhì)測試(分班考)模擬試卷
- 《碳纖維片材加固混凝土結(jié)構(gòu)技術(shù)規(guī)程》(2022年版)
- 短視頻:策劃+拍攝+制作+運營課件(完整版)
- 預(yù)制場(梁場)建設(shè)方案
- 專業(yè)課程融入思政工作的教學(xué)設(shè)計理念與方法(課堂PPT)
評論
0/150
提交評論