深入剖析C#的多態(tài)
2007/1/8 22:40:52
一、什么是多態(tài) 
 
面向?qū)ο蟪绦蛟O(shè)計(jì)中的另外一個(gè)重要概念是多態(tài)性。在運(yùn)行時(shí),可以通過(guò)指向基類的指針,來(lái)調(diào)用實(shí)現(xiàn)派生類中的方法。可以把一組對(duì)象放到一個(gè)數(shù)組中,然后調(diào)用它們的方法,在這種場(chǎng)合下,多態(tài)性作      用就體現(xiàn)出來(lái)了,這些對(duì)象不必是相同類型的對(duì)象。當(dāng)然,如果它們都繼承自某個(gè)類,你可以把這些派生類,都放到一個(gè)數(shù)組中。如果這些對(duì)象都有同名方法,就可以調(diào)用每個(gè)對(duì)象的同名方法。
同一操作作用于不同的對(duì)象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果,這就是多態(tài)性。多態(tài)性通過(guò)派生類重載基類中的虛函數(shù)型方法來(lái)實(shí)現(xiàn)。
在面向?qū)ο蟮南到y(tǒng)中,多態(tài)性是一個(gè)非常重要的概念,它允許客戶對(duì)一個(gè)對(duì)象進(jìn)行操作,由對(duì)象來(lái)完成一系列的動(dòng)作,具體實(shí)現(xiàn)哪個(gè)動(dòng)作、如何實(shí)現(xiàn)由系統(tǒng)負(fù)責(zé)解釋。
“多態(tài)性”一詞最早用于生物學(xué),指同一種族的生物體具有相同的特性。在C#中,多態(tài)性的定義是:同一操作作用于不同的類的實(shí)例,不同的類將進(jìn)行不同的解釋,最后產(chǎn)生不同的執(zhí)行結(jié)果。C#支持兩種類型的多態(tài)性:
● 編譯時(shí)的多態(tài)性
編譯時(shí)的多態(tài)性是通過(guò)重載來(lái)實(shí)現(xiàn)的。對(duì)于非虛的成員來(lái)說(shuō),系統(tǒng)在編譯時(shí),根據(jù)傳遞的參數(shù)、返回的類型等信息決定實(shí)現(xiàn)何種操作。
● 運(yùn)行時(shí)的多態(tài)性
運(yùn)行時(shí)的多態(tài)性就是指直到系統(tǒng)運(yùn)行時(shí),才根據(jù)實(shí)際情況決定實(shí)現(xiàn)何種操作。C#中,運(yùn)行時(shí)的多態(tài)性通過(guò)虛成員實(shí)現(xiàn)。
編譯時(shí)的多態(tài)性為我們提供了運(yùn)行速度快的特點(diǎn),而運(yùn)行時(shí)的多態(tài)性則帶來(lái)了高度靈活和抽象的特點(diǎn)。
二、實(shí)現(xiàn)多態(tài)
多態(tài)性是類為方法(這些方法以相同的名稱調(diào)用)提供不同實(shí)現(xiàn)方式的能力。多態(tài)性允許對(duì)類的某個(gè)方法進(jìn)行調(diào)用而無(wú)需考慮該方法所提供的特定實(shí)現(xiàn)。例如,可能有名為 Road 的類,它調(diào)用另一個(gè)類的 Drive 方法。這另一個(gè)類 Car 可能是 SportsCar 或 SmallCar,但二者都提供 Drive 方法。雖然 Drive 方法的實(shí)現(xiàn)因類的不同而異,但 Road 類仍可以調(diào)用它,并且它提供的結(jié)果可由 Road 類使用和解釋。
可以用不同的方式實(shí)現(xiàn)組件中的多態(tài)性: 
● 接口多態(tài)性。 
● 繼承多態(tài)性。 
● 通過(guò)抽象類實(shí)現(xiàn)的多態(tài)性。 
接口多態(tài)性
多個(gè)類可實(shí)現(xiàn)相同的“接口”,而單個(gè)類可以實(shí)現(xiàn)一個(gè)或多個(gè)接口。接口本質(zhì)上是類需要如何響應(yīng)的定義。接口描述類需要實(shí)現(xiàn)的方法、屬性和事件,以及每個(gè)成員需要接收和返回的參數(shù)類型,但將這些成員的特定實(shí)現(xiàn)留給實(shí)現(xiàn)類去完成。
組件編程中的一項(xiàng)強(qiáng)大技術(shù)是能夠在一個(gè)對(duì)象上實(shí)現(xiàn)多個(gè)接口。每個(gè)接口由一小部分緊密聯(lián)系的方法、屬性和事件組成。通過(guò)實(shí)現(xiàn)接口,組件可以為要求該接口的任何其他組件提供功能,而無(wú)需考慮其中所包含的特定功能。這使后續(xù)組件的版本得以包含不同的功能而不會(huì)干擾核心功能。其他開(kāi)發(fā)人員最常使用的組件功能自然是組件類本身的成員。然而,包含大量成員的組件使用起來(lái)可能比較困難。可以考慮將組件的某些功能分解出來(lái),作為私下實(shí)現(xiàn)的單獨(dú)接口。
根據(jù)接口來(lái)定義功能的另一個(gè)好處是,可以通過(guò)定義和實(shí)現(xiàn)附加接口增量地將功能添加到組件中。優(yōu)點(diǎn)包括: 
1.簡(jiǎn)化了設(shè)計(jì)過(guò)程,因?yàn)榻M件開(kāi)始時(shí)可以很小,具有最小功能;之后,組件繼續(xù)提供最小功能,同時(shí)不斷插入其他的功能,并通過(guò)實(shí)際使用那些功能來(lái)確定合適的功能。 
2.簡(jiǎn)化了兼容性的維護(hù),因?yàn)榻M件的新版本可以在添加新接口的同時(shí)繼續(xù)提供現(xiàn)有接口。客戶端應(yīng)用程序的后續(xù)版本可以利用這些接口的優(yōu)點(diǎn)。 
通過(guò)繼承實(shí)現(xiàn)的多態(tài)性
多個(gè)類可以從單個(gè)基類“繼承”。通過(guò)繼承,類在基類所在的同一實(shí)現(xiàn)中接收基類的所有方法、屬性和事件。這樣,便可根據(jù)需要來(lái)實(shí)現(xiàn)附加成員,而且可以重寫基成員以提供不同的實(shí)現(xiàn)。請(qǐng)注意,繼承類也可以實(shí)現(xiàn)接口,這兩種技術(shù)不是互斥的。
C# 通過(guò)繼承提供多態(tài)性。對(duì)于小規(guī)模開(kāi)發(fā)任務(wù)而言,這是一個(gè)功能

下一頁(yè)
返回列表
返回首頁(yè) 主站蜘蛛池模板: 动漫美女被到爽了流漫画| 《调教办公室》在线观看| 97视频免费在线| 欧洲亚洲国产精华液| 日本黄色一级大片| 午夜视频在线在免费| 91丨九色丨蝌蚪3p| 日本三级网站在线观看| 伊人久久大香线蕉综合5g| 久久久精品久久久久三级| 少妇太爽了在线观看| 亚洲一区无码中文字幕| 绿巨人在线视频免费观看完整版 | 亚洲女人初试黑人巨高清| 金发美女与黑人巨大交| 天堂а√中文最新版在线| 亚欧免费无码aⅴ在线观看| 精品国产午夜肉伦伦影院| 夜夜爱夜夜做夜夜爽| 久久国产精久久精产国| 特大巨黑吊aw在线播放| 国产嫖妓一区二区三区无码| www.噜噜噜| 日韩一中文字幕| 人妖欧美一区二区三区四区| 高清中国一级毛片免费| 在线观看麻豆精品国产不卡| 一级一毛片a级毛片| 最近最好看2019年中文字幕| 免费黄色在线网址| 久久国产精品女| 国产精品无码一区二区三区免费| 三级理论在线播放大全| 欧美乱子伦xxxx| 免费看片A级毛片免费看| 精品国产无限资源免费观看| 国产精品无码av天天爽| 91视频app污| 成人午夜免费福利视频| 亚洲AV无码乱码麻豆精品国产| 欧美另类xxxx图片|