這篇文章主要介紹“C#多態(tài)性的特點(diǎn)是什么”,在日常操作中,相信很多人在C#多態(tài)性的特點(diǎn)是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C#多態(tài)性的特點(diǎn)是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)綿陽(yáng)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
理解C#多態(tài)性之前首先理解一下什么叫多態(tài)。同一操作作用于不同的對(duì)象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果,這就是多態(tài)性。C#多態(tài)性通過(guò)派生類覆寫基類中的虛函數(shù)型方法來(lái)實(shí)現(xiàn)。
C#多態(tài)性分為兩種,一種是編譯時(shí)的多態(tài)性,一種是運(yùn)行時(shí)的多態(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)。
下面我們來(lái)分別理解一下C#多態(tài)中涉及到的四個(gè)概念:重載,覆寫,虛方法和抽象方法。
C#多態(tài)性之重載和覆寫的區(qū)別:
重載
類中定義的方法的不同版本
public int Calculate(int x, int y) public double Calculate(double x, double y)
特點(diǎn)(兩必須一可以)
方法名必須相同、參數(shù)列表必須不相同、返回值類型可以不相同
覆寫
子類中為滿足自己的需要來(lái)重復(fù)定義某個(gè)方法的不同實(shí)現(xiàn)。通過(guò)使用override關(guān)鍵字來(lái)實(shí)現(xiàn)覆寫。只有虛方法和抽象方法才能被覆寫。
要求(三相同)
(1)相同的方法名稱
(2)相同的參數(shù)列表
(3)相同的返回值類型
C#多態(tài)性之虛方法和抽象方法:
虛方法:
聲明使用virtual關(guān)鍵字。
調(diào)用虛方法,運(yùn)行時(shí)將確定調(diào)用對(duì)象是什么類的實(shí)例,并調(diào)用適當(dāng)?shù)母矊懙姆椒ā?/p>
虛方法可以有實(shí)現(xiàn)體。
抽象方法:
必須被派生類覆寫的方法。
可以看成是沒(méi)有實(shí)現(xiàn)體的虛方法。
如果類中包含抽象方法,那么類就必須定義為抽象類,不論是否還包含其他一般方法。
C#多態(tài)性其他的介紹:
昨天突然發(fā)現(xiàn)C#,和C++倆種語(yǔ)言在多態(tài)性的實(shí)現(xiàn)機(jī)制上面的細(xì)微差別。
如果是C++,在基類的構(gòu)造函數(shù)里面調(diào)用虛函數(shù)的話,會(huì)調(diào)用本類的不會(huì)調(diào)用派生類的,原因是基類構(gòu)造的時(shí)候,虛表還沒(méi)有被派生類繼承和修改。
但如果是C#,那就不同了,在基類的構(gòu)造函數(shù)里面照樣調(diào)用派生類的。不知道有誰(shuí)知道C#它的這種底層機(jī)制是怎樣的?
是這樣的,C++會(huì)先初始化基類,然后逐級(jí)初始化派生類型。C#則是一開始就把對(duì)象創(chuàng)建好了,然后逐個(gè)調(diào)用構(gòu)造函數(shù)。本質(zhì)區(qū)別在于C++的構(gòu)造函數(shù)的任務(wù)是初始化,C#則不然,C#的類型的任何字段不必初始化,均有默認(rèn)值,所以C#在調(diào)用構(gòu)造函數(shù)之前就已經(jīng)將對(duì)象初始化完畢了。
通過(guò)繼承,一個(gè)類可以用作多種類型:可以用作它自己的類型、任何基類型,或者在實(shí)現(xiàn)接口時(shí)用作任何接口類型。這稱為多態(tài)性。C#中的每種類型都是多態(tài)的。類型可用作它們自己的類型或用作Object實(shí)例,因?yàn)槿魏晤愋投甲詣?dòng)將Object當(dāng)作基類型。
多態(tài)性不僅對(duì)派生類很重要,對(duì)基類也很重要。任何情況下,使用基類實(shí)際上都可能是在使用已強(qiáng)制轉(zhuǎn)換為基類類型的派生類對(duì)象。基類的設(shè)計(jì)者可以預(yù)測(cè)到其基類中可能會(huì)在派生類中發(fā)生更改的方面。例如,表示汽車的基類可能包含這樣的行為:當(dāng)考慮的汽車為小型貨車或敞篷汽車時(shí),這些行為將會(huì)改變?;惪梢詫⑦@些類成員標(biāo)記為虛擬的,從而允許表示敞篷汽車和小型貨車的派生類重寫該行為。
到此,關(guān)于“C#多態(tài)性的特點(diǎn)是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
本文標(biāo)題:C#多態(tài)性的特點(diǎn)是什么
本文URL:http://muchs.cn/article34/jsogpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、微信公眾號(hào)、網(wǎng)站排名、Google、搜索引擎優(yōu)化、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)