C#中多態(tài)性的實(shí)現(xiàn)
C#語(yǔ)言三大特性:繼承,封裝,多態(tài)
一:多態(tài)性
多態(tài)是指一個(gè)行為具有多個(gè)不同表現(xiàn)形式的能力,在C#中通過(guò)多態(tài)性的檢測(cè)時(shí)機(jī)可以分為靜態(tài)多態(tài)性和動(dòng)態(tài)多態(tài)性
靜態(tài)多態(tài)性:函數(shù)重載和運(yùn)算符重載
動(dòng)態(tài)多態(tài)性:抽象方法、重寫(xiě)方法、隱藏方法
二:函數(shù)重載(overlode)
——函數(shù)名必須相同
——函數(shù)參數(shù)類型不同

——函數(shù)參數(shù)個(gè)數(shù)不同

——函數(shù)參數(shù)順序不同

三:抽象(abstract)
——包含抽象函數(shù)的類,類也必須定義為抽象的

——抽象函數(shù)只有定義沒(méi)有函數(shù)體,并且必須定義為public

——抽象類中可以包含普通函數(shù)和抽象函數(shù)

——抽象類不能實(shí)例化,不能使用抽象類去構(gòu)造對(duì)象,但是可以使用抽象類去聲明對(duì)象

可以在類前添加sealed關(guān)鍵字,使類變?yōu)槊芊忸悾芊忸愑幸韵绿攸c(diǎn):
——不能被繼承,所以密封類中不能定義虛方法和抽象方法,抽象類不能定義為sealed
——重寫(xiě)的方法可以聲明為密封方法,表示該方法不能被子類重寫(xiě)
四:虛方法(virtual)
抽象方法與虛方法區(qū)別:
——抽象函數(shù)不能有函數(shù)體,虛函數(shù)必須有函數(shù)體
——當(dāng)繼承了一個(gè)抽象類時(shí),必須去實(shí)現(xiàn)抽象函數(shù),抽象函數(shù)也只能在子類中去實(shí)現(xiàn)。但是虛函數(shù)可以在基類實(shí)現(xiàn)也可以在子類重寫(xiě)
——抽象函數(shù)必須在抽象類中,虛函數(shù)不必須在抽象類中
五:重寫(xiě)方法(override)與隱藏方法(new)
——隱藏方法的調(diào)用(用什么類型來(lái)聲明,在調(diào)用方法的時(shí)候就會(huì)調(diào)用什么類型的方法)
——重寫(xiě)方法的調(diào)用(用什么類型來(lái)構(gòu)造,在調(diào)用方法的時(shí)候就會(huì)調(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)用(用什么類型來(lái)聲明,在調(diào)用方法的時(shí)候就會(huì)調(diào)用什么類型的方法)
Boss oneEnemy = new Boss();
oneEnemy.Move(); //調(diào)用的是隱藏方法,用子類的聲明來(lái)調(diào)用的,調(diào)用的就是子類的Move
Enemy twoEnemy = new Boss();
twoEnemy.Move(); //調(diào)用的隱藏方法,用父類的聲明來(lái)調(diào)用的,調(diào)用的就是父類的Move方法
//=====虛方法的調(diào)用(用什么類型來(lái)構(gòu)造,在調(diào)用方法的時(shí)候就會(huì)調(diào)用什么類型的方法)
Enemy threeEnemy = new Enemy();
threeEnemy.Attac(); //調(diào)用虛方法,用父類來(lái)實(shí)例化的,所以調(diào)用的是父類的Attac方法
Enemy fourEnemy = new Boss();
fourEnemy.Attac(); //調(diào)用虛方法,用子類來(lái)實(shí)例化的,所以調(diào)用的就是子類(Boss)的Attac方法
}
}
virtual與new的原理:https://www.runoob.com/w3cnote/csharp-polymorphism2.html
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C# Winform按鈕中圖片實(shí)現(xiàn)左圖右字的效果實(shí)例
這篇文章主要給大家介紹了關(guān)于C# Winform按鈕中圖片實(shí)現(xiàn)左圖右字效果的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
C#使用zxing/zbar/thoughtworkQRcode解析二維碼的示例代碼
zxing是谷歌開(kāi)源的二維碼庫(kù),zbar,thoughtworkQRcode也是開(kāi)源的,三者之間比較各有優(yōu)劣,本文將通過(guò)一個(gè)案例demo源碼,帶來(lái)認(rèn)識(shí)學(xué)習(xí)下這三者的實(shí)際解碼效果,感興趣的可以了解一下2023-07-07
C#與C++動(dòng)態(tài)鏈接庫(kù)DLL參數(shù)互傳方式
這篇文章主要介紹了C#與C++動(dòng)態(tài)鏈接庫(kù)DLL參數(shù)互傳方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11

