国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C#面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝、繼承和多態(tài)分析

2021-11-21 01:24占梅
電子技術(shù)與軟件工程 2021年6期
關(guān)鍵詞:多態(tài)實(shí)例多態(tài)性

占梅

(廈門南洋職業(yè)學(xué)院 福建省廈門市 361102)

面向?qū)ο缶哂蟹庋b、繼承、多態(tài)三大特征,這些特性主要通過(guò)類來(lái)體現(xiàn)。封裝可以隱藏實(shí)現(xiàn)細(xì)節(jié),其能夠在所對(duì)應(yīng)對(duì)象中對(duì)具體事物屬性及行為進(jìn)行包裝,但該對(duì)象僅能夠?qū)⒉糠謱傩约靶袨閷?duì)外進(jìn)行有選擇性的公布,導(dǎo)致代碼模塊化。繼承是一個(gè)面向?qū)ο蟮脑~語(yǔ)。說(shuō)明一個(gè)類(派生類)能分享其它類(基類)的特征和行為,其子對(duì)象能夠繼承父對(duì)象所擁有的屬性及行為,繼承也能夠擴(kuò)展自身已存在的代碼模塊(類)。多態(tài)就是相同的事物,調(diào)用其相同的方法,參數(shù)也相同時(shí),但表現(xiàn)的行為卻不同。其中封裝及繼承的目的均是為了能夠使代碼可以重復(fù)使用。

1 對(duì)象的封裝

1.1 封裝的概念

對(duì)抽象獲得數(shù)據(jù)及功能等進(jìn)行結(jié)合形成有機(jī)整體的過(guò)程即為封裝,其實(shí)質(zhì)上是數(shù)據(jù)與操作數(shù)據(jù)源代碼兩者的結(jié)合,也是一個(gè)面向?qū)ο蟮母拍?,?duì)外部世界隱藏類的內(nèi)部,類的成員包括數(shù)據(jù)與函數(shù)。數(shù)據(jù)的安全性及編程簡(jiǎn)化處理都有賴于封裝實(shí)現(xiàn),因此在對(duì)封裝進(jìn)行實(shí)踐應(yīng)用時(shí)無(wú)需詳細(xì)了解其步驟,只需要通過(guò)外部接口對(duì)類成員賦予特有的訪問(wèn)權(quán)限便能夠使用。封裝在面向?qū)ο蟪潭戎兄饕康氖欠乐箤?duì)實(shí)現(xiàn)細(xì)節(jié)的訪問(wèn)。封裝不僅可以封裝成員變量,還可以封裝成員方法。

1.2 封裝的實(shí)現(xiàn)

(1)封裝的具體實(shí)現(xiàn)需要遵循一定的原則,隱藏?zé)o需對(duì)外提供的內(nèi)容,包括屬性等,并詳細(xì)說(shuō)明公共方法便于對(duì)其訪問(wèn)。

(2)作為一種權(quán)限修復(fù)符,private 關(guān)鍵字能夠?qū)Τ蓡T變量及成員方法進(jìn)行相應(yīng)的修飾,但需要注意的是被修飾成員的訪問(wèn)僅能夠在本類中進(jìn)行訪問(wèn)。用private 修飾成員變量,提供對(duì)應(yīng)的get()和set ()方法,private 僅僅是封裝的一種體現(xiàn)形式。

2 對(duì)象的繼承

2.1 繼承的概念

繼承可以減少代碼的冗余,提高軟件模塊的可復(fù)用性和可擴(kuò)充性,提高軟件的開(kāi)發(fā)效率。繼承是面向?qū)ο缶幊痰慕M成部分,是所有面向?qū)ο蟮恼Z(yǔ)言都要具備的特性。先將幾個(gè)類中相同的屬性和方法進(jìn)行抽離,單獨(dú)定義在一個(gè)新建的類中。其他的類直接繼承當(dāng)前新建的類,語(yǔ)法是派生類:基類(或者是子類:父類),派生類可以直接使用基類中允許使用的屬性和方法,可以使用base 關(guān)鍵字直接訪問(wèn)基類的屬性和方法(成員變量)。在C#中派生類中,能夠由基類完成對(duì)方法、屬性、事件以及索引指示器等的繼承,但無(wú)法對(duì)構(gòu)造函數(shù)、折構(gòu)函數(shù)進(jìn)行繼承。派生類對(duì)基類成員的繼承主要是采用隱式的方法繼承的。

2.2 繼承的實(shí)現(xiàn)機(jī)制

2.2.1 可傳遞性

繼承在實(shí)施過(guò)程中具有一定的可傳遞性,如B 派生了C,而A又能夠派生B,由此可以發(fā)現(xiàn)C 不僅屬于B 中聲明成員,其同時(shí)也是A 成員,所有類基類均為Object 類。

2.2.2 可擴(kuò)展性

繼承時(shí)可以使用現(xiàn)有類的所有功能,在無(wú)需重新編寫原來(lái)類的情況下即可對(duì)這些功能進(jìn)行擴(kuò)展。其具有添加新成員的功能,但無(wú)法將繼承成員去除。

2.2.3 訪問(wèn)方式可設(shè)定性

不能被繼承的函數(shù)還包括構(gòu)造函數(shù)、析構(gòu)函數(shù),另外的成員盡管訪問(wèn)方式不同都能夠得到繼承,通常,基類成員采取不同的訪問(wèn)方式主要是目的是明確是否可以通過(guò)派生類進(jìn)行訪問(wèn)。

2.2.4 可覆蓋性

派生類若將新成員定義為與基類成員同名時(shí),能夠?qū)σ牙^承成員名進(jìn)行覆蓋,但是覆蓋并不是刪除,而是限制了對(duì)同名成員的訪問(wèn)。

2.2.5 可重載性

通常,虛方法、虛屬性包括虛索引指示器的定義都可以通過(guò)類實(shí)現(xiàn),基于其派生類功能,能夠?qū)崿F(xiàn)對(duì)上述成員的重載,呈現(xiàn)出多態(tài)性特征。

2.2.6 可多級(jí)繼承性

一般情況下,派生類的繼承僅能夠通過(guò)一個(gè)類完成,其多重繼承則需要利用接口技術(shù)。

2.3 訪問(wèn)與隱藏基類成員

2.3.1 使用base 訪問(wèn)基類成員

對(duì)基類成員的訪問(wèn)主要利用的是base 關(guān)鍵字,若基類中存在被其他虛擬方法重寫的方法,那么可以對(duì)基類進(jìn)行調(diào)用,構(gòu)造相應(yīng)的函數(shù)。需要注意的是基本訪問(wèn)實(shí)現(xiàn)途徑主要包括構(gòu)造函數(shù)、實(shí)例方法以及實(shí)例屬性訪問(wèn)器,無(wú)法實(shí)現(xiàn)靜態(tài)方法應(yīng)用 base 關(guān)鍵字訪問(wèn)。若真的需要靜態(tài)方法則此時(shí)需要顯式類型轉(zhuǎn)換對(duì)基類成員進(jìn)行訪問(wèn)。

2.3.2 隱藏基類成員

若想隱藏基類成員可采用密封類實(shí)現(xiàn),其主要目的為避免編寫的類被繼承,或現(xiàn)有的類沒(méi)有繼承的必要。基于這一需求,密封類(sealed class)概念誕生。密封類是不能被繼承的類,為了避免從一個(gè)類中繼承,密封類不能是抽象類,因?yàn)槌橄箢惪偸窍M焕^承的。

密封類的應(yīng)用能夠避免繼承類,密封方法的提出防止了派生類重載該方法。通??梢圆捎胹ealed 修飾符對(duì)方法類進(jìn)行修飾,密封方法覆蓋范圍較廣,通常每個(gè)成員方法都可以稱之為密封法,且sealed 與override 修飾符能夠同時(shí)應(yīng)用。

由基類繼承的隱藏成員可以通過(guò) new 修飾符得以顯式。當(dāng)需要對(duì)繼承成員進(jìn)行隱藏時(shí),只需在派生類中對(duì)相同名稱進(jìn)行聲明,并予以 new 修飾符修飾。

3 對(duì)象的多態(tài)

3.1 多態(tài)的概念

在面向?qū)ο蟮南到y(tǒng)中,多態(tài)性是一個(gè)非常重要的概念,使用不同的實(shí)例去執(zhí)行不同的操作,好處就是增強(qiáng)程序的可擴(kuò)展性及可維護(hù)性,使代碼更簡(jiǎn)潔。多態(tài)性通過(guò)派生類重載基類中的虛函數(shù)型方法來(lái)實(shí)現(xiàn)。在C#中多態(tài)性的定義是:在繼承關(guān)系的前提下,實(shí)例化出不同的對(duì)象,這些對(duì)象調(diào)用相同的方法,但是表現(xiàn)出不同的行為,這就叫做多態(tài)。而表現(xiàn)不同的行為就是在各個(gè)子類中用overide進(jìn)行重寫。在C#語(yǔ)言中,體現(xiàn)多態(tài)有三種方式,虛方法、抽象類、接口。在調(diào)用時(shí)以方法參數(shù)區(qū)分具體調(diào)用哪個(gè)方法。運(yùn)行時(shí)的多態(tài)性就是虛擬成員在基類中申明了方法、屬性、索引器或事件,也就是做一個(gè)簡(jiǎn)單的處理。使用Virtual 關(guān)鍵字將成員申明為虛擬成員。而在聲明時(shí),父類的方法前面加上Virtual 關(guān)鍵字,子類的方法前面加上override 關(guān)鍵字,且與父類方法同名,表示父類的方法可以被子類進(jìn)行修改和重新定義。C#中,運(yùn)行時(shí)的多態(tài)性通過(guò)虛成員實(shí)現(xiàn)。運(yùn)行時(shí)的多態(tài)性具有高度靈活和抽象的特點(diǎn),且必須是虛擬方法,方法的簽名必須一致,包括方法名稱,參數(shù)和參數(shù)類型。

多態(tài)存在的三個(gè)必要條件:繼承、重寫(子類繼承父類后對(duì)父類方法進(jìn)行重新定義)、父類引用指向子類對(duì)象。

3.2 多態(tài)的實(shí)現(xiàn)

3.2.1 通過(guò)接口實(shí)現(xiàn)多態(tài)

通常,多個(gè)類可以通過(guò)同一“接口”得以實(shí)現(xiàn),單個(gè)類也能夠保障一個(gè)或多個(gè)接口的實(shí)現(xiàn)。實(shí)現(xiàn)類主要是用于部分成員特定實(shí)現(xiàn),包括接口描述類方法、屬性和事件等,另外,成員接收、返回參數(shù)類型也往往通過(guò)實(shí)現(xiàn)類完成。

組件編程擁有強(qiáng)大的技能,主要表現(xiàn)為可在同一對(duì)象上完成多接口,且每個(gè)接口之間的屬性及事件組成情況等聯(lián)系密切。接口實(shí)現(xiàn)后,其他組件可對(duì)接口提供相應(yīng)的各項(xiàng)功能,無(wú)需對(duì)其特定功能做出相應(yīng)的考慮,后續(xù)組件功能豐富,且不會(huì)影響到核心功能。如有需求,可以由專業(yè)技術(shù)開(kāi)發(fā)人員分解組件功能,作為一種單獨(dú)接口進(jìn)行實(shí)現(xiàn)。

接口的書寫格式要求如下:

(1)在接口中,我們使用Interface 關(guān)鍵字來(lái)聲明一個(gè)接口,沒(méi)有class 名稱為"IXxxx";

(2)接口中不能包含字段,但是可以包含屬性;

(3)接口中的抽象方法不能有方法體,全是抽象方法,但是又不允許使用abstract 進(jìn)行修飾;

(4)接口中的成員不允許添加訪問(wèn)修飾符,默認(rèn)都是public;

(5)最終形成了上面的樣式,顯得非常的簡(jiǎn)潔。

接口注意事項(xiàng):

(1)一個(gè)類可實(shí)現(xiàn)多個(gè)接口,被實(shí)現(xiàn)的多個(gè)接口用逗號(hào)分開(kāi);

(2)一個(gè)接口可繼承多個(gè)接口,多個(gè)接口間也要用逗號(hào)分開(kāi);

(3)由于接口中的方法均為抽象方法,所以接口肯定是不能實(shí)例化的。

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

多個(gè)類的繼承能夠通過(guò)一個(gè)基類完成,完成繼承后,不僅能夠?qū)崿F(xiàn)對(duì)基類方法、屬性及事件的接收,而且能夠結(jié)合實(shí)際需要附加新的成員,對(duì)基類成員進(jìn)行重寫,并提供豐富的實(shí)現(xiàn)途徑與方法。

C#具有多態(tài)性的特點(diǎn),該機(jī)制應(yīng)用于小規(guī)模開(kāi)發(fā)任務(wù)表現(xiàn)為強(qiáng)大的功能,但在大規(guī)模系統(tǒng)應(yīng)用中尚存在一定的不足,主要表現(xiàn)為對(duì)繼承驅(qū)動(dòng)多態(tài)性過(guò)分強(qiáng)調(diào),使得大規(guī)模資源由編碼轉(zhuǎn)變?yōu)樵O(shè)計(jì),對(duì)總開(kāi)發(fā)時(shí)間縮短無(wú)明顯的作用。使用繼承最為突出的功能即在現(xiàn)有類中進(jìn)行功能的添加,若基類框架得到充分調(diào)試后開(kāi)始,能夠提升程序員工作效率。若應(yīng)用程序需要對(duì)多個(gè)相關(guān)類進(jìn)行設(shè)計(jì),要實(shí)現(xiàn)相關(guān)類的共享,那么要應(yīng)用繼承。通常重疊功能的實(shí)現(xiàn)多依托基類,而基類又能夠派生應(yīng)用程序中使用的類。

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

作為一種特殊基類,抽象類不僅包含了普通類成員,而且還容納了大量抽象類成員。所謂抽象類成員,其主要指的是無(wú)法被實(shí)例化的屬性、方法。由抽象類派生的類需要具備抽象屬性與方法。抽象類不僅具備繼承的功能,而且能夠提供接口元素。但需要注意的是抽象類無(wú)法實(shí)例化,應(yīng)通過(guò)繼承發(fā)揮作用。類的成員需要通過(guò)繼承類得以實(shí)現(xiàn)。類成員實(shí)現(xiàn)后仍有被重寫的可能性,且能夠完成附加接口或其他功能。

抽象類的繼承、接口功能的實(shí)現(xiàn),兼具已實(shí)現(xiàn)方法與未實(shí)現(xiàn)方法的功能與屬性,后者往往需要在繼承類中得以實(shí)現(xiàn)。因此需要在類方法中添加不變功能,打開(kāi)針對(duì)其他過(guò)程的靈活性。抽象類的一大優(yōu)勢(shì)如下:在對(duì)新版本進(jìn)行組件時(shí),可結(jié)合需求在基類中添加附加方法,但要維持接口不變。抽象類的使用往往為相關(guān)組件在保障一組相同功能且在其他方法中保持靈活性時(shí),應(yīng)用價(jià)值高。

抽象類:抽象類使用抽象方法來(lái)實(shí)現(xiàn),在C#中,我們規(guī)定是無(wú)法創(chuàng)建抽象類的實(shí)例,嚴(yán)格的說(shuō):就算定義的抽象方法中沒(méi)有寫抽象方法,也是無(wú)法創(chuàng)建抽象類的實(shí)例的;如果能實(shí)例出來(lái)一個(gè)抽象,那么調(diào)用這些無(wú)方法體的抽象方法是也沒(méi)有任何意義的,因此抽象類是無(wú)法實(shí)例化的;還有就是抽象類中不光可以寫抽象方法,還可以寫普通方法,也可以寫虛方法,這也是和接口的區(qū)別。

4 封裝、繼承和多態(tài)的優(yōu)點(diǎn)

4.1 封裝的優(yōu)點(diǎn)

封裝具有鮮明的優(yōu)勢(shì),封裝良好一方面能夠減少耦合,另一方面能夠便于自由修改類內(nèi)部結(jié)構(gòu),接口清楚,便于對(duì)成員的精準(zhǔn)控制,使得細(xì)節(jié)得到隱藏。不僅如此,封裝還能夠?qū)?shù)據(jù)存取與權(quán)限問(wèn)題予以有效的解決,在封裝作用下能夠隱藏?cái)?shù)據(jù),營(yíng)造密閉空間,在該空間中設(shè)置數(shù)據(jù)訪問(wèn)權(quán)限。一個(gè)類中包含敏感數(shù)據(jù),有些人可以訪問(wèn),有些人不能訪問(wèn),如果不對(duì)這些數(shù)據(jù)的訪問(wèn)加以限制,后果將會(huì)非常嚴(yán)重。

4.2 繼承的優(yōu)點(diǎn)

減少代碼量,實(shí)現(xiàn)代碼復(fù)用。

4.3 多態(tài)性優(yōu)點(diǎn)

消除類型之間的耦合關(guān)系;可替換性;可擴(kuò)充性;接口性;靈活性;簡(jiǎn)化性。

5 結(jié)論

面向?qū)ο缶哂蟹庋b、繼承及多態(tài)三個(gè)特征。在封裝支持下,能夠保障數(shù)據(jù)安全性,并對(duì)編程進(jìn)行簡(jiǎn)化處理,在具體應(yīng)用中無(wú)需過(guò)分關(guān)注其細(xì)節(jié),在外部接口作用下,對(duì)類成員訪問(wèn)權(quán)限進(jìn)行設(shè)置。作為一種層次模型,繼承具有重復(fù)應(yīng)用的價(jià)值,能夠?qū)残苑椒ㄟM(jìn)行表述。派生類可和基類有同樣名字的成員,實(shí)現(xiàn)對(duì)基類成員的隱藏,基類方法及實(shí)例變量能夠得到相應(yīng)的繼承,并結(jié)合需求做出相應(yīng)的修改與增減。其多態(tài)性決定了不同類能夠?qū)崿F(xiàn)對(duì)同一消息的響應(yīng),對(duì)應(yīng)用程度函數(shù)同名問(wèn)題做出相應(yīng)的解決。

猜你喜歡
多態(tài)實(shí)例多態(tài)性
單核苷酸多態(tài)性與中醫(yī)證候相關(guān)性研究進(jìn)展
分層多態(tài)加權(quán)k/n系統(tǒng)的可用性建模與設(shè)計(jì)優(yōu)化
參差多態(tài)而功不唐捐
馬鈴薯cpDNA/mtDNA多態(tài)性的多重PCR檢測(cè)
GlobalFiler~? PCR擴(kuò)增試劑盒驗(yàn)證及其STR遺傳多態(tài)性
完形填空Ⅱ
完形填空Ⅰ
CYP3A4*1G基因多態(tài)性及功能的初步探討
煙堿型乙酰膽堿受體基因多態(tài)與早發(fā)性精神分裂癥的關(guān)聯(lián)研究
峨山| 科尔| 泗洪县| 屯昌县| 洪雅县| 闸北区| 礼泉县| 莲花县| 宝兴县| 邢台市| 宜黄县| 保康县| 卓尼县| 西乌珠穆沁旗| 景东| 文水县| 枣庄市| 安宁市| 昆明市| 新龙县| 咸丰县| 东山县| 抚顺县| 乐都县| 琼中| 武宣县| 建宁县| 闵行区| 定结县| 鹰潭市| 桑日县| 上虞市| 泸水县| 突泉县| 休宁县| 东莞市| 泾阳县| 横山县| 子洲县| 蒙自县| 永顺县|