C面向?qū)ο蟪绦虻脑O(shè)計技術(shù)05章_第1頁
C面向?qū)ο蟪绦虻脑O(shè)計技術(shù)05章_第2頁
C面向?qū)ο蟪绦虻脑O(shè)計技術(shù)05章_第3頁
C面向?qū)ο蟪绦虻脑O(shè)計技術(shù)05章_第4頁
C面向?qū)ο蟪绦虻脑O(shè)計技術(shù)05章_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第第5章章 c#面向?qū)ο蟪绦蛟O(shè)計技術(shù)面向?qū)ο蟪绦蛟O(shè)計技術(shù) www.zg- www.zr- www.skf- www.nsk- www.fag- www.ntn- 重點內(nèi)容重點內(nèi)容 理解面向?qū)ο缶幊痰奶攸c 掌握類與對象、接口 掌握抽象類與抽象方法 理解密封類與密封方法 理解迭代器、分部類和索引器 掌握運(yùn)算符重載5.1 類與對象類與對象在比較傳統(tǒng)的面向過程的應(yīng)用程序開發(fā)中,程序是由一系列過程或函數(shù)的模塊組成的可執(zhí)行的實體,每個模塊執(zhí)行某個特定的功能,面向過程編程能很好地解決小型的、具體的問題;但面對復(fù)雜的大系統(tǒng),它卻無法勝任,因而迫使人們?nèi)で蠼鉀Q大型的復(fù)雜系統(tǒng)的新方法。在這種背景下,產(chǎn)生了面向?qū)?/p>

2、象的編程技術(shù)。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊堂嫦驅(qū)ο缶幊蹋╫bject-oriented programming,簡稱oop)是開發(fā)應(yīng)用程序的一種新方法、新思想,他提出了一種全新的程序設(shè)計風(fēng)格,以數(shù)據(jù)為核心,其編程單元是類,對象最終由類實例化。面向?qū)ο蠹夹g(shù)具有三個重要的特點: 封裝(encapsulation):把數(shù)據(jù)與對數(shù)據(jù)進(jìn)行的操作封閉在類內(nèi),其它對象可通過接口訪問封裝的內(nèi)容。增加了安全性。 繼承(inheritance):使一個類可以獲得先前已定義類的全部特征,增強(qiáng)了代碼的可重用性,提高了開發(fā)效率。 多態(tài)(polymorphism):指調(diào)用相同的函數(shù)名時,可導(dǎo)致完全不同的行為,增加了程序和靈活

3、性。類類類是面向?qū)ο箝_發(fā)方法的基本成分,簡單地說,類是一種數(shù)據(jù)結(jié)構(gòu),它是具有相同屬性和行為的一組對象的集合,用于模擬現(xiàn)實中存在的對象和關(guān)系。1 定義類類定義的語法規(guī)則如下所示:訪問修飾符 class 類名類的成員變量和方法;2.定義類的成員變量和局部變量類體中定義的變量成為成員變量,類的方法中定義的變量成為局部變量。成員變量在整個類中有效,局部變量只在定義它的方法中有效。關(guān)鍵字static修飾的是類變量,沒有static修飾是實例變量。類變量也稱為靜態(tài)變量,實例變量又稱為非靜態(tài)變量。程序運(yùn)行期間,靜態(tài)變量的內(nèi)存單位不會被其他變量占用,不同對象的同名靜態(tài)變量占據(jù)同一個內(nèi)存單元,因此靜態(tài)變量的值在

4、其中一個對象中發(fā)生變化,則這個變化在另外一個對象使用這個靜態(tài)變量時是有影響的。靜態(tài)變量是由類直接調(diào)用的,由類實例化的對象不能調(diào)用靜態(tài)變量,它通常用于處理需要統(tǒng)計類的所有對象信息或者是此類對象之間的相互作用的信息,是針對于類所實例化的所用對象。類(續(xù))類(續(xù))3.定義方法方法是用于是想可由該類執(zhí)行的計算和操作,是包含一系列語句的代碼塊。在c#中,方法包括四種:(1) 構(gòu)造方法在各式各樣的方法中有一種特殊的方法,稱為構(gòu)造方法,這是每個類都有的方法,類似于c語言中的構(gòu)造函數(shù)。構(gòu)造方法有以下特點: 構(gòu)造方法的名稱必須與類名相同。 構(gòu)造方法必須是void型的(但是void可以省略不寫),即沒有返回值。

5、在創(chuàng)建某個類時系統(tǒng)自動創(chuàng)建一個默認(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ù))類(續(xù))(2)析構(gòu)方法析構(gòu)方法是相對與構(gòu)造方法而言的,它是用來實現(xiàn)析構(gòu)一個類實例所需的操作,指定了當(dāng)銷毀該類的一個實例時所需要執(zhí)行的操作。析構(gòu)方法有以下特點: 析構(gòu)函數(shù)聲明方式與構(gòu)造函數(shù)的相同只是在類名前加個()符號 析構(gòu)函數(shù)不接受任何參數(shù),不帶任何反問修飾符。 一個類只能有一個析構(gòu)函數(shù)。 析構(gòu)函數(shù)不能重載 析構(gòu)函數(shù)不能顯式或手動調(diào)用,只有

6、在該類被銷毀的時候調(diào)用由于以上特點,一般析構(gòu)方法寫的都是一些資源回收之類的東西,如關(guān)閉數(shù)據(jù)庫、關(guān)閉文件、關(guān)閉網(wǎng)絡(luò)連接等操作,其定義的語法規(guī)則如下所示: void 類名(參數(shù)1,參數(shù)2,)方法體;類(續(xù))類(續(xù))(3) 靜態(tài)方法靜態(tài)方法是用static關(guān)鍵字標(biāo)識的方法,它不能作用于具體的實例,只能由類直接調(diào)用,其定義的語法規(guī)則如下所示: static 方法名(參數(shù)1,參數(shù)2,)方法體; (4)實例方法沒有static修飾的是實例方法,它只能被實例化的對象調(diào)用,請定義的語法規(guī)則如下所示: 方法名(參數(shù)1,參數(shù)2,)方法體;對象對象 對象是面向?qū)ο蟮幕境煞?,對象包含變量成員和方法,它所包含的變量組

7、成了存儲在對象中的數(shù)據(jù),而其包含的方法可以訪問對象的變量。略為復(fù)雜的對象可能不包含任何數(shù)據(jù),而只包含方法,并使用方法表示一個操作。 c#中的對象是類的定義實例化,這標(biāo)識對象是類創(chuàng)建的一個實例,“類的實例”和對象標(biāo)識相同的概念,但是類和對象是完全兩個不同的概念。對象(續(xù))對象(續(xù))1.對象的聲明和實例化c#中要求使用對象前,必須聲明和實例化該對象,其語法規(guī)則如下所示:類名 對象名 = new 構(gòu)造方法(參數(shù)列表);在例5.6中,程序定義了兩個不同的類,主類中用語句:cat cat1 = new cat(4, 1); 2.類與對象的關(guān)系 類就是一種抽象的數(shù)據(jù)類型,但是其抽象的程度可能不同,而對象就

8、是一個類的實例。 類和對象的區(qū)別:類是具有相同或相似結(jié)構(gòu)、操作和約束規(guī)則的對象組成的集合,而對象是某一類的具體化實例,每一個類都是具有某些共同特征的對象的抽象。5.2 類的繼承類的繼承繼承性是軟件復(fù)用的一種形式,是面向?qū)ο缶幊痰年P(guān)鍵技術(shù)之一。新類由已存在的類生成。軟件復(fù)用可縮短軟件開發(fā)的時間,復(fù)用那些已證實并經(jīng)過調(diào)試的高質(zhì)量的軟件,可以提高系統(tǒng)的性能,減少系統(tǒng)在使用過程中出現(xiàn)的問題。當(dāng)用戶建立一個新類時,不必全部寫出所有的實例變量和實例方法,只需聲明該類繼承已定義過的“父類”(也叫基類、超類)的實例變量和實例方法,這個新類就稱作“子類”,每個子類也可以成為其他某個子類的父類。一個類可以繼承另一

9、個類,被繼承的類稱為父類,繼承的類稱為子類。子類可以繼承父類所有的非私有(private)成員作為自己的成員。除繼承來的成員外,子類還可以創(chuàng)建自己的成員。類的繼承(續(xù))類的繼承(續(xù))1.成員訪問和繼承 類成員往往聲明為私有的,以避免對它們進(jìn)行未授權(quán)的使用或破壞。繼承類并不違反私有訪問限制。 訪問權(quán)限是由關(guān)鍵字public、private、protected,internal設(shè)定的。 可以放在class前面修飾類的修飾符關(guān)鍵字只有public和internal,如果沒寫任何關(guān)鍵字,默認(rèn)是internal。其中用internal修飾的類,只有在同一程序集內(nèi),該類才可以被訪問到;而用public修飾

10、的類,可以在任何地方訪問此類。 如果父類的變量和方法被修飾為public,則這些變量和方法是共有的,可以在子類中通過對象進(jìn)行訪問。 如果父類的變量和方法被修飾為private,則這些變量和方法是私有的,不能在子類中通過對象進(jìn)行訪問。 如果父類的變量和方法被修飾為protected,則這些變量和方法是受保護(hù)的,它和private的權(quán)限很相似,唯一不同的是protected類型成員可以被子類繼承,而private類型成員不可以被繼承。 類的繼承(續(xù))類的繼承(續(xù))2.構(gòu)造函數(shù)和繼承在層次化結(jié)構(gòu)中,父類和子類都有自己的構(gòu)造函數(shù),這樣會引起一個重要的問題:哪個構(gòu)造函數(shù)承擔(dān)建立子類對象的任務(wù),是父類的構(gòu)

11、造函數(shù)還是子類的構(gòu)造函數(shù)。其答案是子類的構(gòu)造函數(shù)建造對象的父類部分,而子類的構(gòu)造函數(shù)建造對象的子類部分。這是合理的,因為父類不知道也不能訪問子類的元素。因此,其構(gòu)造函數(shù)必須分開。 5.3 接口接口接口和類一樣,可以有方法、屬性等成員。但與類不同的是,接口僅僅提供的聲明,并不允許提供成員的實現(xiàn),接口成員只能在具體的類或結(jié)構(gòu)代碼中實現(xiàn),其定義的語法規(guī)則如下所示:訪問修飾符 interface 接口標(biāo)識符 :接口基接口體;聲明接口后,類可以通過繼承接口來實現(xiàn)其中的方法。繼承接口的語法同繼承類語法類似,使用冒號“:”,將要繼承的接口放在類的后面,如果要繼承多個接口,使用逗號“,”將其分開。在實現(xiàn)接口的

12、類中使用接口中聲明的方法時,創(chuàng)建的方法體的名稱、返回類型和參數(shù)必須和接口中聲明的完全一致。 5.4 抽象類與抽象方法抽象類與抽象方法抽象方法是只包含方法定義,但沒有具體實現(xiàn)的方法,它需要其子類類具體實現(xiàn),使用關(guān)鍵字abstract修飾的方法。抽象類是用關(guān)鍵字abstract修飾的類,它含有一個或多個抽象成員。抽象類不能夠被實例化,因為它包含了沒有具體實現(xiàn)的方法。其語法規(guī)則如下所示:訪問修飾符 abstract class 抽象類名抽象屬性;抽象方法;抽象類是特殊的類,具有以下特殊特征: 抽象類不能實例化 抽象類可以包含抽象方法和抽象訪問器 抽象類派生出的非抽象類必須包括繼承所有抽象方法和抽象訪

13、問器的實現(xiàn),而且必須使用override修飾符的屬性聲明重寫抽象方法和抽象訪問器。 如果父類被聲明為抽象類,并存在未實現(xiàn)的抽象方法,那么子類就必須實現(xiàn)父類中所有的abstract成員,否則子類也是一個抽象類。抽象方法是特殊的方法,只能被包含在抽象類中。包含抽象方法的類必須定義為抽象類,否則編譯程序時報錯,但抽象類不一定要包含抽象方法。接口與抽象類區(qū)別接口與抽象類區(qū)別從語法和功能方法看,接口與抽象類都非常相似。它們都是提供成員的聲明,都不能實例化,但是它們之間也存在著很多的差別: 在抽象類中可以有非抽象方法和抽象方法,但在接口中只有抽象方法,它是抽象類的變體。 類可以繼承多個接口,但僅能從一個抽

14、象類繼承。從抽象類派生的類仍可實現(xiàn)接口。可以在創(chuàng)建組件時使用抽象類,因為它們使您得以在某些方法中指定不變級功能,但直到需要該類的特定實現(xiàn)之后才實現(xiàn)其他方法。抽象類也制定版本,因為如果在派生類中需要附加功能,則可以將其添加到基類而不中斷代碼。 5.5 密封類與密封方法密封類與密封方法密封式面向?qū)ο笾械牧硪粋€重要的概念,密封限定了類的繼承方式。密封類可以用來限制擴(kuò)展性。當(dāng)在程序中密封了某個類是,其他類就不能從該密封類中繼承,所以密封類不能用做基類,也不能是抽象類。使用密封類可以發(fā)防止對類型景象自定義,這些特性在某些情況下雨面向?qū)ο缶幊碳夹g(shù)的靈活性和可擴(kuò)展性是相抵觸的,其語法規(guī)則如下所示:訪問修飾符

15、sealed class 類名類體;密封方法同密封類一樣,它可以保證方法不被重寫,必須和關(guān)鍵字override一起使用,其語法規(guī)則如下所示:訪問修飾符sealed override 返回類型 方法名()方法體;5.6 迭代器與分部類迭代器與分部類1.迭代器迭代器是c# 2.0中的新增功能,它是方法、get訪問器或運(yùn)算符,它是開發(fā)人員能夠在類或結(jié)構(gòu)中支持foreach迭代,而不必實現(xiàn)整個ienumerable接口。只需提供一個迭代器,即可遍歷類中的數(shù)據(jù)結(jié)構(gòu)。當(dāng)編譯器檢測到迭代器是,它將自動生成ienumerable或ienumerable接口的current、movenext和dispose方法

16、。迭代器的特點: 迭代器是可以返回相同類型的值的有序序列的一段代碼。 迭代器可用做方法、運(yùn)算符或get訪問器的代碼體。 迭代器代碼使用yield return語句依次返回每個元素,使用yield break終止迭代。 可以在類中實現(xiàn)多個迭代器。 迭代器的返回類型必須為ienumerable或ienumerator。 迭代器對集合類特別有用,它提供一種簡單的方法來迭代不常用的數(shù)據(jù)結(jié)構(gòu)。迭代器與分部類(續(xù))迭代器與分部類(續(xù))2. 分部類分部類也是c#2.0中新增的功能,它可以將類、結(jié)構(gòu)或接口的定義拆分到兩個或多個源文件中,每個源文件包含類的已備份,編譯應(yīng)用程序時,再將所用的部分組合起來,這樣使得

17、程序的結(jié)構(gòu)更加合理,代碼的組織更加緊密。分部類使用的主要應(yīng)用場合有兩個:一個是處理大型項目時,使一個類分布于多個獨(dú)立文件中,這樣可以讓多個開發(fā)人員同時對該類進(jìn)行處理;二是使用自動生成的源時,無需重新創(chuàng)建源文件便可將代碼添加到類中。定義分部類需要使用關(guān)鍵字partial,其定義的語法規(guī)則如下所示:partial class 類名分部類的成員;partial class 類名分部類的成員;在定義分部類時,同一類型的各個部分的所用分部類型的定義都必須在同一程序集和同一模塊中進(jìn)行定義,它不能跨多個模塊,且它們必須使用相同的類名。5.7 索引器索引器為了給類提供與數(shù)組相似的方法進(jìn)行索引,c#引入了索引器

18、。所謂索引器就是允許按照與數(shù)組相同的方式對類、結(jié)構(gòu)或接口進(jìn)行索引,它類似于屬性,不同之處在于它可以像數(shù)組那樣對對象使用下標(biāo),且提供了通過索引方式方便地訪問數(shù)據(jù)信息的方法。索引器具有以下特點: 索引器使得對象可以按照與數(shù)組相似的方法進(jìn)行索引。 get訪問器與set訪問器用來分配和檢索值。 value關(guān)鍵字用來定義有set索引器分配的值。 索引器不必根據(jù)整數(shù)值進(jìn)行縮影,可以根據(jù)需求定義特定的查找機(jī)制。 索引器值不歸類的變量,不能將所以其值作為ref或out參數(shù)來傳遞。索引器一般是在類或結(jié)構(gòu)上定義的,定義索引器必須使用this關(guān)鍵字,其定義的語法規(guī)則如下所示:修飾符 數(shù)據(jù)類型 this 數(shù)據(jù)類型 索引/get或set訪問5.8泛型泛型泛型是c# 2.0和公共語言運(yùn)行庫中的一個新功能,它將類型參數(shù)的概念引入到.net framework。泛型類和泛型方法同時具備可重用性、類型安全和效率的優(yōu)點,這是非泛型類和非泛型方法無法具備的特點,它通常用在集合和在集合上運(yùn)行的方法中。.net 2.0版類庫提供一個新的名為system.collections.generic的命名空間,其中包含了幾個新的基于泛型的集合類。開發(fā)人員還可以創(chuàng)建自定義泛型類和方法,以提供個人的通用解決方案和設(shè)計類型安全的高效模式等。其定義的語法規(guī)則如下所示:(1)定義泛型類訪問修飾符 class 類名類的成員; (2)定義

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論