資源描述:
《面向?qū)ο缶幊蹋憾鄳B(tài).ppt》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、目錄第1章計(jì)算機(jī)、因特網(wǎng)、萬維網(wǎng)和C#第2章VisualStudio.NET集成開發(fā)環(huán)境第3章C#編程介紹第4章控制結(jié)構(gòu)(一)第5章控制結(jié)構(gòu)(二)第6章方法第7章數(shù)組第8章基于對象的編程第9章面向?qū)ο缶幊蹋豪^承第10章面向?qū)ο缶幊蹋憾鄳B(tài)性第11章異常處理第12章圖形用戶界面概念(一)第13章圖形用戶界面概念(二)第14章多線程第15章字符、字符串和正則表達(dá)式第16章圖形和多媒體第17章文件和流第18章數(shù)據(jù)庫、SQL和ADO.NET第19章可擴(kuò)展標(biāo)記語言(XML)第20章ASP.NET、Web窗體和Web控件第21章ASP.NET和Web服務(wù)第22章網(wǎng)絡(luò):基于流的套接字和數(shù)據(jù)包第23章
2、數(shù)據(jù)結(jié)構(gòu)和集合第24章可訪問性第一部分.NET綜述第二部分結(jié)構(gòu)化編程第三部分面向?qū)ο缶幊痰谒牟糠諧#相關(guān)應(yīng)用第五部分C#應(yīng)用擴(kuò)展第10章面向?qū)ο缶幊蹋憾鄳B(tài)性10.1概述繼承和多態(tài)都是開發(fā)復(fù)雜軟件時(shí)要用到的重要技術(shù)。多態(tài)性能讓我們編寫出以常規(guī)方式來處理的大量相關(guān)類,并簡化了向系統(tǒng)添加新的類和功能。有了多態(tài)性,就能設(shè)計(jì)和實(shí)現(xiàn)更容易擴(kuò)展的系統(tǒng)。多態(tài)性定義派生類對象可以被視為基類對象來處理如果基類引用引用了一個(gè)派生類對象,就可以將這個(gè)基類引用轉(zhuǎn)換為該對象實(shí)際的數(shù)據(jù)類型,并將該對象作為這種實(shí)際的數(shù)據(jù)類型來處理。引用在程序中的體現(xiàn)是“=”請看代碼代碼演示了如何將派生類對象分配給基類引用,然后通過
3、強(qiáng)制類型轉(zhuǎn)換,將基類引用轉(zhuǎn)換為派生類引用。10.2派生類對象轉(zhuǎn)換為基類對象第21行代碼將circle1(一個(gè)派生類對象的引用)分配給point2(一個(gè)基類的對象的引用)。在C#中,由于繼承是“屬于”關(guān)系,所以可以將一個(gè)派生類對象分配給一個(gè)基類對象。反之則很危險(xiǎn)。第23、24行中,當(dāng)C#碰到一個(gè)virtual(虛擬)方法調(diào)用(如ToString方法)時(shí),它會根據(jù)被調(diào)用方法的對象類型(而不是引用該對象的引用類型)來判斷被調(diào)用方法的版本。本例中,point2引用了一個(gè)Cricle對象,所以C#調(diào)用了Circle的ToString方法,而不是Point的ToString方法。這個(gè)調(diào)用哪個(gè)方法
4、的判斷便是多態(tài)性的一個(gè)例子。staticvoidMain(string[]args){Pointpoint1=newPoint(30,50);Circlecircle1=newCircle(120,89,2.7);Pointpoint2=circle1;//1、基類引用派生類對象output+=point2.ToString();//訪問的是Circle類的ToString方法Circlecircle2=(Circle)point2;//2、基類引用可以轉(zhuǎn)換為派生類引用if(point1isCircle)//判斷左操作符類型是否與右操作符一致{circle2=(Circle)poin
5、t1;//無法將基類對象直接轉(zhuǎn)化為派生類對象}}部分代碼基類引用和派生類引用與基類對象和派生類對象有4種組合方式:1、用基類引用來引用基類對象;2、用派生類引用來引用派生類對象;3、用基類引用來引用派生類對象;4、用派生類引用無法直接引用基類對象。需要的過程為:首先定義基類引用來引用派生類對象,然后將基類引用轉(zhuǎn)換為派生類引用。對于大型程序中的對象,判斷其類型的方法之一式使用switch結(jié)構(gòu)。但是,使用switch邏輯會使程序面臨各種各樣的問題。多態(tài)性編程可以消除不必要的switch邏輯。使用C#的多態(tài)性機(jī)制來執(zhí)行對應(yīng)的邏輯,程序員可以避免與switch邏輯相關(guān)的常見錯(cuò)誤。10.3類型
6、字段和switch語句10.4多態(tài)性示例SpaceObjectDrawYourself()PlutonianDrawYourself()VenutianDrawYourself()SpaceShipDrawYourself()LaserBeamDrawYourself()MartianDrawYourself()定義從沒有打算實(shí)例化任何對象的類,稱為抽象類。通常作為基類,一般稱為抽象基類。抽象類通常包含一個(gè)或多個(gè)抽象方法或者抽象屬性。對類而言,如果對象可以從它那里被實(shí)例化,可以把這樣的類稱為具體類。10.5抽象類和方法關(guān)鍵字abstract用于將方法和屬性聲明為抽象。被聲明為abst
7、ract的方法和屬性不會提供實(shí)現(xiàn)部分——試圖這樣做是語法錯(cuò)誤。每個(gè)具體的派生類都必須覆蓋基類的所有抽象方法和屬性(利用關(guān)鍵字override),并提供這些方法和屬性的具體實(shí)現(xiàn)部分。其中包含抽象方法的任何類都必須被聲明為abstract。抽象方法和虛擬方法的區(qū)別在于:虛擬方法有一個(gè)實(shí)現(xiàn)部分,并為派生類提供了覆蓋該方法的選項(xiàng);相反,抽象方法沒有提供實(shí)現(xiàn)部分,強(qiáng)制派生類覆蓋方法(否則派生類不能成為具體類)。多態(tài)性特別適用于實(shí)現(xiàn)分層式軟件系統(tǒng)。在面向?qū)ο蟮木幊讨校?/p>