日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
C#多態(tài)性概念及特點(diǎn)的解析

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

10年積累的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有桐城免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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ù)、返回的類(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ò)覆寫(xiě)虛成員實(shí)現(xiàn)。

下面我們來(lái)分別理解一下C#多態(tài)中涉及到的四個(gè)概念:重載,覆寫(xiě),虛方法和抽象方法。

C#多態(tài)性之重載和覆寫(xiě)的區(qū)別:

重載

類(lèi)中定義的方法的不同版本

 
 
 
  1. public int Calculate(int x, int y)
  2. public double Calculate(double x, double y)

特點(diǎn)(兩必須一可以)

方法名必須相同、參數(shù)列表必須不相同、返回值類(lèi)型可以不相同

覆寫(xiě)

子類(lèi)中為滿足自己的需要來(lái)重復(fù)定義某個(gè)方法的不同實(shí)現(xiàn)。通過(guò)使用override關(guān)鍵字來(lái)實(shí)現(xiàn)覆寫(xiě)。只有虛方法和抽象方法才能被覆寫(xiě)。

要求(三相同)

(1)相同的方法名稱(chēng)

(2)相同的參數(shù)列表

(3)相同的返回值類(lèi)型

C#多態(tài)性之虛方法和抽象方法:

虛方法:

聲明使用virtual關(guān)鍵字。

調(diào)用虛方法,運(yùn)行時(shí)將確定調(diào)用對(duì)象是什么類(lèi)的實(shí)例,并調(diào)用適當(dāng)?shù)母矊?xiě)的方法。

虛方法可以有實(shí)現(xiàn)體。

抽象方法:

必須被派生類(lèi)覆寫(xiě)的方法。

可以看成是沒(méi)有實(shí)現(xiàn)體的虛方法。

如果類(lèi)中包含抽象方法,那么類(lèi)就必須定義為抽象類(lèi),不論是否還包含其他一般方法。

C#多態(tài)性其他的介紹:

昨天突然發(fā)現(xiàn)C#,和C++倆種語(yǔ)言在多態(tài)性的實(shí)現(xiàn)機(jī)制上面的細(xì)微差別。

如果是C++,在基類(lèi)的構(gòu)造函數(shù)里面調(diào)用虛函數(shù)的話,會(huì)調(diào)用本類(lèi)的不會(huì)調(diào)用派生類(lèi)的,原因是基類(lèi)構(gòu)造的時(shí)候,虛表還沒(méi)有被派生類(lèi)繼承和修改。

但如果是C#,那就不同了,在基類(lèi)的構(gòu)造函數(shù)里面照樣調(diào)用派生類(lèi)的。不知道有誰(shuí)知道C#它的這種底層機(jī)制是怎樣的?

是這樣的,C++會(huì)先初始化基類(lèi),然后逐級(jí)初始化派生類(lèi)型。C#則是一開(kāi)始就把對(duì)象創(chuàng)建好了,然后逐個(gè)調(diào)用構(gòu)造函數(shù)。本質(zhì)區(qū)別在于C++的構(gòu)造函數(shù)的任務(wù)是初始化,C#則不然,C#的類(lèi)型的任何字段不必初始化,均有默認(rèn)值,所以C#在調(diào)用構(gòu)造函數(shù)之前就已經(jīng)將對(duì)象初始化完畢了。

通過(guò)繼承,一個(gè)類(lèi)可以用作多種類(lèi)型:可以用作它自己的類(lèi)型、任何基類(lèi)型,或者在實(shí)現(xiàn)接口時(shí)用作任何接口類(lèi)型。這稱(chēng)為多態(tài)性。C#中的每種類(lèi)型都是多態(tài)的。類(lèi)型可用作它們自己的類(lèi)型或用作Object實(shí)例,因?yàn)槿魏晤?lèi)型都自動(dòng)將Object當(dāng)作基類(lèi)型。

多態(tài)性不僅對(duì)派生類(lèi)很重要,對(duì)基類(lèi)也很重要。任何情況下,使用基類(lèi)實(shí)際上都可能是在使用已強(qiáng)制轉(zhuǎn)換為基類(lèi)類(lèi)型的派生類(lèi)對(duì)象。基類(lèi)的設(shè)計(jì)者可以預(yù)測(cè)到其基類(lèi)中可能會(huì)在派生類(lèi)中發(fā)生更改的方面。例如,表示汽車(chē)的基類(lèi)可能包含這樣的行為:當(dāng)考慮的汽車(chē)為小型貨車(chē)或敞篷汽車(chē)時(shí),這些行為將會(huì)改變。基類(lèi)可以將這些類(lèi)成員標(biāo)記為虛擬的,從而允許表示敞篷汽車(chē)和小型貨車(chē)的派生類(lèi)重寫(xiě)該行為。

C#多態(tài)性的相關(guān)理解就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#多態(tài)性有所幫助。


網(wǎng)站名稱(chēng):C#多態(tài)性概念及特點(diǎn)的解析
URL分享:http://m.5511xx.com/article/cdjhigp.html