成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入淺出談C#多態(tài)

開(kāi)發(fā) 后端
本文將談?wù)凜#多態(tài),面向?qū)ο蟪绦蛟O(shè)計(jì)中的另外一個(gè)重要概念是多態(tài)性。希望本文對(duì)大家了解C#多態(tài)有所幫助。

一、什么是C#多態(tài)?

面向?qū)ο蟪绦蛟O(shè)計(jì)中的另外一個(gè)重要概念是多態(tài)性。在運(yùn)行時(shí),可以通過(guò)指向基類(lèi)的指針,來(lái)調(diào)用實(shí)現(xiàn)派生類(lèi)中的方法??梢园岩唤M對(duì)象放到一個(gè)數(shù)組中,然后調(diào)用它們的方法,在這種場(chǎng)合下,多態(tài)性作用就體現(xiàn)出來(lái)了,這些對(duì)象不必是相同類(lèi)型的對(duì)象。當(dāng)然,如果它們都繼承自某個(gè)類(lèi),你可以把這些派生類(lèi),都放到一個(gè)數(shù)組中。如果這些對(duì)象都有同名方法,就可以調(diào)用每個(gè)對(duì)象的同名方法。

同一操作作用于不同的對(duì)象,可以有不同的解釋?zhuān)a(chǎn)生不同的執(zhí)行結(jié)果,這就是多態(tài)性。多態(tài)性通過(guò)派生類(lèi)重載基類(lèi)中的虛函數(shù)型方法來(lái)實(shí)現(xiàn)。

在面向?qū)ο蟮南到y(tǒng)中,多態(tài)性是一個(gè)非常重要的概念,它允許客戶(hù)對(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)性的定義是:同一操作作用于不同的類(lèi)的實(shí)例,不同的類(lèi)將進(jìn)行不同的解釋?zhuān)?**產(chǎn)生不同的執(zhí)行結(jié)果。C#支持兩種類(lèi)型的多態(tài)性:

◆編譯時(shí)的多態(tài)性

編譯時(shí)的多態(tài)性是通過(guò)重載來(lái)實(shí)現(xiàn)的。對(duì)于非虛的成員來(lái)說(shuō),系統(tǒng)在編譯時(shí),根據(jù)傳遞的參數(shù)、返回的類(lèi)型等信息決定實(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)C#多態(tài)

C#多態(tài)性是類(lèi)為方法(這些方法以相同的名稱(chēng)調(diào)用)提供不同實(shí)現(xiàn)方式的能力。多態(tài)性允許對(duì)類(lèi)的某個(gè)方法進(jìn)行調(diào)用而無(wú)需考慮該方法所提供的特定實(shí)現(xiàn)。例如,可能有名為Road的類(lèi),它調(diào)用另一個(gè)類(lèi)的Drive方法。這另一個(gè)類(lèi)Car可能是SportsCar或SmallCar,但二者都提供Drive方法。雖然Drive方法的實(shí)現(xiàn)因類(lèi)的不同而異,但Road類(lèi)仍可以調(diào)用它,并且它提供的結(jié)果可由Road類(lèi)使用和解釋。

可以用不同的方式實(shí)現(xiàn)組件中的多態(tài)性:

◆接口多態(tài)性。

◆繼承多態(tài)性。

◆通過(guò)抽象類(lèi)實(shí)現(xiàn)的多態(tài)性。

接口多態(tài)性

多個(gè)類(lèi)可實(shí)現(xiàn)相同的“接口”,而單個(gè)類(lèi)可以實(shí)現(xiàn)一個(gè)或多個(gè)接口。接口本質(zhì)上是類(lèi)需要如何響應(yīng)的定義。接口描述類(lèi)需要實(shí)現(xiàn)的方法、屬性和事件,以及每個(gè)成員需要接收和返回的參數(shù)類(lèi)型,但將這些成員的特定實(shí)現(xiàn)留給實(shí)現(xiàn)類(lèi)去完成。

組件編程中的一項(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)可能比較困難??梢钥紤]將組件的某些功能分解出來(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)有接口??蛻?hù)端應(yīng)用程序的后續(xù)版本可以利用這些接口的優(yōu)點(diǎn)。

通過(guò)繼承實(shí)現(xiàn)的多態(tài)性

多個(gè)類(lèi)可以從單個(gè)基類(lèi)“繼承”。通過(guò)繼承,類(lèi)在基類(lèi)所在的同一實(shí)現(xiàn)中接收基類(lèi)的所有方法、屬性和事件。這樣,便可根據(jù)需要來(lái)實(shí)現(xiàn)附加成員,而且可以重寫(xiě)基成員以提供不同的實(shí)現(xiàn)。請(qǐng)注意,繼承類(lèi)也可以實(shí)現(xiàn)接口,這兩種技術(shù)不是互斥的。

C#通過(guò)繼承提供多態(tài)性。對(duì)于小規(guī)模開(kāi)發(fā)任務(wù)而言,這是一個(gè)功能強(qiáng)大的機(jī)制,但對(duì)于大規(guī)模系統(tǒng),通常證明會(huì)存在問(wèn)題。過(guò)分強(qiáng)調(diào)繼承驅(qū)動(dòng)的多態(tài)性一般會(huì)導(dǎo)致資源大規(guī)模地從編碼轉(zhuǎn)移到設(shè)計(jì),這對(duì)于縮短總的開(kāi)發(fā)時(shí)間沒(méi)有任何幫助。

何時(shí)使用繼承驅(qū)動(dòng)的多態(tài)性呢?使用繼承首先是為了向現(xiàn)有基類(lèi)添加功能。若從經(jīng)過(guò)完全調(diào)試的基類(lèi)框架開(kāi)始,則程序員的工作效率將大大提高,方法可以增量地添加到基類(lèi)而不中斷版本。當(dāng)應(yīng)用程序設(shè)計(jì)包含多個(gè)相關(guān)類(lèi),而對(duì)于某些通用函數(shù),這些相關(guān)類(lèi)必須共享同樣的實(shí)現(xiàn)時(shí),您也可能希望使用繼承。重疊功能可以在基類(lèi)中實(shí)現(xiàn),應(yīng)用程序中使用的類(lèi)可以從該基類(lèi)中派生。抽象類(lèi)合并繼承和實(shí)現(xiàn)的功能,這在需要二者之一的元素時(shí)可能很有用。

通過(guò)抽象類(lèi)實(shí)現(xiàn)的多態(tài)性

抽象類(lèi)同時(shí)提供繼承和接口的元素。抽象類(lèi)本身不能實(shí)例化,它必須被繼承。該類(lèi)的部分或全部成員可能未實(shí)現(xiàn),該實(shí)現(xiàn)由繼承類(lèi)提供。已實(shí)現(xiàn)的成員仍可被重寫(xiě),并且繼承類(lèi)仍可以實(shí)現(xiàn)附加接口或其他功能。

抽象類(lèi)提供繼承和接口實(shí)現(xiàn)的功能。抽象類(lèi)不能示例化,必須在繼承類(lèi)中實(shí)現(xiàn)。它可以包含已實(shí)現(xiàn)的方法和屬性,但也可以包含未實(shí)現(xiàn)的過(guò)程,這些未實(shí)現(xiàn)過(guò)程必須在繼承類(lèi)中實(shí)現(xiàn)。這使您得以在類(lèi)的某些方法中提供不變級(jí)功能,同時(shí)為其他過(guò)程保持靈活性選項(xiàng)打開(kāi)。抽象類(lèi)的另一個(gè)好處是:當(dāng)要求組件的新版本時(shí),可根據(jù)需要將附加方法添加到基類(lèi),但接口必須保持不變。

何時(shí)使用抽象類(lèi)呢?當(dāng)需要一組相關(guān)組件來(lái)包含一組具有相同功能的方法,但同時(shí)要求在其他方法實(shí)現(xiàn)中具有靈活性時(shí),可以使用抽象類(lèi)。當(dāng)預(yù)料可能出現(xiàn)版本問(wèn)題時(shí),抽象類(lèi)也具有價(jià)值,因?yàn)榛?lèi)比較靈活并易于被修改。

【編輯推薦】

  1. C#中調(diào)用Windows API之托管對(duì)象
  2. C#進(jìn)度條的使用及開(kāi)發(fā)淺析
  3. C#進(jìn)度條使用之多線程應(yīng)用淺析
  4. C#進(jìn)度條實(shí)現(xiàn)之異步實(shí)例淺析
  5. C#進(jìn)度條實(shí)現(xiàn)實(shí)例
責(zé)任編輯:彭凡 來(lái)源: host01.com
相關(guān)推薦

2022-01-11 07:52:22

CSS 技巧代碼重構(gòu)

2009-06-18 10:23:03

Javascript 基本框架

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2019-01-07 15:29:07

HadoopYarn架構(gòu)調(diào)度器

2017-07-02 18:04:53

塊加密算法AES算法

2012-05-21 10:06:26

FrameworkCocoa

2021-07-20 15:20:02

FlatBuffers阿里云Java

2022-09-26 09:01:15

語(yǔ)言數(shù)據(jù)JavaScript

2009-11-30 16:46:29

學(xué)習(xí)Linux

2012-02-21 13:55:45

JavaScript

2018-11-09 16:24:25

物聯(lián)網(wǎng)云計(jì)算云系統(tǒng)

2019-11-11 14:51:19

Java數(shù)據(jù)結(jié)構(gòu)Properties

2022-11-09 08:06:15

GreatSQLMGR模式

2022-12-02 09:13:28

SeataAT模式

2022-10-31 09:00:24

Promise數(shù)組參數(shù)

2009-11-18 13:30:37

Oracle Sequ

2019-12-04 10:13:58

Kubernetes存儲(chǔ)Docker

2021-04-27 08:54:43

ConcurrentH數(shù)據(jù)結(jié)構(gòu)JDK8

2025-03-27 09:38:35

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲成人av在线播放 | 在线视频第一页 | 看真人视频一级毛片 | 亚洲国产网站 | 久久国内精品 | 久久国产成人精品国产成人亚洲 | 久久久精彩视频 | 亚洲成人免费电影 | 精品久久久久久 | 欧美性猛交一区二区三区精品 | 国产91精品网站 | 国产精品99久久久久久人 | 精品色| 91精品国产91久久久久久丝袜 | 国产成人综合在线 | 亚洲国产高清高潮精品美女 | 国产区在线观看 | 亚洲国产成人精品女人 | 黄色片免费在线观看 | 亚洲社区在线 | 亚洲成人日韩 | 精品欧美乱码久久久久久1区2区 | 日韩成人免费中文字幕 | 99国产精品99久久久久久 | 欧美激情一区二区 | 99re在线视频观看 | 一本综合久久 | 91av亚洲| 日韩av一区二区在线观看 | 久久国内精品 | 精品区| 在线播放中文字幕 | 丝袜美腿一区二区三区 | 男人天堂久久 | 欧美精品二区三区 | 精品中文在线 | 日本色高清 | 九色视频网站 | 一区二区三区四区毛片 | 日日骚网 | 欧美一区二区三区视频在线 |