溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在C#中實(shí)現(xiàn)多態(tài)性

發(fā)布時間:2021-04-16 18:03:00 來源:億速云 閱讀:176 作者:Leah 欄目:編程語言

這篇文章給大家介紹如何在C#中實(shí)現(xiàn)多態(tài)性,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

C#語言三大特性:繼承,封裝,多態(tài)

一:多態(tài)性

多態(tài)是指一個行為具有多個不同表現(xiàn)形式的能力,在C#中通過多態(tài)性的檢測時機(jī)可以分為靜態(tài)多態(tài)性和動態(tài)多態(tài)性
靜態(tài)多態(tài)性:函數(shù)重載和運(yùn)算符重載
動態(tài)多態(tài)性:抽象方法、重寫方法、隱藏方法

二:函數(shù)重載(overlode)

——函數(shù)名必須相同

——函數(shù)參數(shù)類型不同

如何在C#中實(shí)現(xiàn)多態(tài)性

——函數(shù)參數(shù)個數(shù)不同
如何在C#中實(shí)現(xiàn)多態(tài)性

——函數(shù)參數(shù)順序不同
如何在C#中實(shí)現(xiàn)多態(tài)性

三:抽象(abstract)

——包含抽象函數(shù)的類,類也必須定義為抽象的
如何在C#中實(shí)現(xiàn)多態(tài)性

——抽象函數(shù)只有定義沒有函數(shù)體,并且必須定義為public
如何在C#中實(shí)現(xiàn)多態(tài)性

——抽象類中可以包含普通函數(shù)和抽象函數(shù)
如何在C#中實(shí)現(xiàn)多態(tài)性

——抽象類不能實(shí)例化,不能使用抽象類去構(gòu)造對象,但是可以使用抽象類去聲明對象
如何在C#中實(shí)現(xiàn)多態(tài)性

可以在類前添加sealed關(guān)鍵字,使類變?yōu)槊芊忸悾芊忸愑幸韵绿攸c(diǎn):
——不能被繼承,所以密封類中不能定義虛方法和抽象方法,抽象類不能定義為sealed
——重寫的方法可以聲明為密封方法,表示該方法不能被子類重寫

四:虛方法(virtual)

抽象方法與虛方法區(qū)別:
——抽象函數(shù)不能有函數(shù)體,虛函數(shù)必須有函數(shù)體
——當(dāng)繼承了一個抽象類時,必須去實(shí)現(xiàn)抽象函數(shù),抽象函數(shù)也只能在子類中去實(shí)現(xiàn)。但是虛函數(shù)可以在基類實(shí)現(xiàn)也可以在子類重寫
——抽象函數(shù)必須在抽象類中,虛函數(shù)不必須在抽象類中

五:重寫方法(override)與隱藏方法(new)

——隱藏方法的調(diào)用(用什么類型來聲明,在調(diào)用方法的時候就會調(diào)用什么類型的方法)
——重寫方法的調(diào)用(用什么類型來構(gòu)造,在調(diào)用方法的時候就會調(diào)用什么類型的方法)

class Enemy
{
 public void Move()
 {
  Console.WriteLine("Enemy Move");
 }
 
 public virtual void Attack()
 {
  Console.WriteLine("Enemy Attack");
 }
}
 
class Boss : Enemy
{
 public override void Attack()
 {
  Console.WriteLine("Boss Attack");
 }
 
 public new void Move()
 {
  Console.WriteLine("Boss Move");
 }
}
 
class MainClass
{
 static void Main(string[] args)
 {
  //=====隱藏方法的調(diào)用(用什么類型來聲明,在調(diào)用方法的時候就會調(diào)用什么類型的方法)
  Boss oneEnemy = new Boss();
  oneEnemy.Move(); //調(diào)用的是隱藏方法,用子類的聲明來調(diào)用的,調(diào)用的就是子類的Move
  Enemy twoEnemy = new Boss();
  twoEnemy.Move(); //調(diào)用的隱藏方法,用父類的聲明來調(diào)用的,調(diào)用的就是父類的Move方法
 
  //=====虛方法的調(diào)用(用什么類型來構(gòu)造,在調(diào)用方法的時候就會調(diào)用什么類型的方法)
  Enemy threeEnemy = new Enemy();
  threeEnemy.Attac(); //調(diào)用虛方法,用父類來實(shí)例化的,所以調(diào)用的是父類的Attac方法
  Enemy fourEnemy = new Boss();
  fourEnemy.Attac(); //調(diào)用虛方法,用子類來實(shí)例化的,所以調(diào)用的就是子類(Boss)的Attac方法
 }
}

關(guān)于如何在C#中實(shí)現(xiàn)多態(tài)性就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI