偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C#多態(tài)性概念及特點(diǎn)的解析

開發(fā) 后端
C#多態(tài)性概念是什么呢?如何理解C#多態(tài)性概念呢?C#多態(tài)性的特點(diǎn)是什么呢?與C++有什么不同么?那么本文就向你介紹具體的內(nèi)容。

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

C#多態(tài)性分為兩種,一種是編譯時(shí)的多態(tài)性,一種是運(yùn)行時(shí)的多態(tài)性。

◆編譯時(shí)的多態(tài)性:編譯時(shí)的多態(tài)性是通過重載來實(shí)現(xiàn)的。對(duì)于非虛的成員來說,系統(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)性是通過覆寫虛成員實(shí)現(xiàn)。

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

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

重載

類中定義的方法的不同版本

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

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

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

覆寫

子類中為滿足自己的需要來重復(fù)定義某個(gè)方法的不同實(shí)現(xiàn)。通過使用override關(guān)鍵字來實(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)體。

抽象方法:

必須被派生類覆寫的方法。

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

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

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

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

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

但如果是C#,那就不同了,在基類的構(gòu)造函數(shù)里面照樣調(diào)用派生類的。不知道有誰知道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ì)象初始化完畢了。

通過繼承,一個(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ì)象?;惖脑O(shè)計(jì)者可以預(yù)測(cè)到其基類中可能會(huì)在派生類中發(fā)生更改的方面。例如,表示汽車的基類可能包含這樣的行為:當(dāng)考慮的汽車為小型貨車或敞篷汽車時(shí),這些行為將會(huì)改變。基類可以將這些類成員標(biāo)記為虛擬的,從而允許表示敞篷汽車和小型貨車的派生類重寫該行為。

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

【編輯推薦】

  1. C#打開Excel文檔的兩大方法解析
  2. C#Excel文本搜索應(yīng)用淺析
  3. C#創(chuàng)建Excel文件實(shí)例講解
  4. 淺析C#創(chuàng)建Excel文件實(shí)現(xiàn)的實(shí)際操作
  5. C#多態(tài)性的理解詳談
責(zé)任編輯:仲衡 來源: CSDN博客
相關(guān)推薦

2009-08-28 16:48:50

C#多態(tài)性

2009-09-01 14:51:19

C#多態(tài)性

2010-02-01 14:07:12

C++多態(tài)性

2023-10-20 09:51:00

編程開發(fā)

2009-09-04 16:37:37

C# DES算法

2009-09-09 16:46:59

C# XmlSeria

2010-10-08 14:54:22

JavaScript特

2010-01-28 16:16:32

C++多態(tài)性

2011-03-08 09:40:26

Java多態(tài)性

2009-08-20 18:47:19

C#異步通信

2009-08-18 09:51:18

C#枚舉類型

2011-07-11 16:35:28

Java

2009-06-19 14:10:42

Java多態(tài)性

2011-07-11 16:45:25

JAVA多態(tài)性

2009-09-01 16:10:28

C#單元測(cè)試

2009-08-24 15:28:19

C# 泛型方法

2009-08-20 19:08:30

C#異步調(diào)用

2009-08-24 17:39:21

C# 泛型集合

2009-07-07 17:37:32

JSP標(biāo)簽庫(kù)

2009-08-12 10:37:13

C#運(yùn)算符重載
點(diǎn)贊
收藏

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