C#使用虛擬方法實(shí)現(xiàn)多態(tài)
本文實(shí)例講述了C#使用虛擬方法實(shí)現(xiàn)多態(tài)。分享給大家供大家參考。具體分析如下:
我們看一個(gè)例子,假若有一個(gè)動(dòng)物類(lèi),類(lèi)中用方法cry()描述動(dòng)物的叫聲,不同的動(dòng)物的叫聲是不一樣的。根據(jù)繼承的特征,把類(lèi)中公共部分的內(nèi)容放在父類(lèi)中,那么cry()方法就應(yīng)該放在父類(lèi)中,根據(jù)這樣的思路編寫(xiě)程序如下:
using System; class Anmial { public void Cry() { Console.WriteLine("這是動(dòng)物的叫聲"); } } class Dog: Anmial { public void Run() { Console.WriteLine("狗路得快"); } } class Cat: Anmial { public void Look() { Console.WriteLine("貓長(zhǎng)得乖"); } } class Test { static void Main() { Dog mydog = new Dog(); mydog.Cry(); mydog.Run(); Cat mycat = new Cat(); mycat.Cry(); mycat.Look(); Console.ReadKey(); } }
運(yùn)行后發(fā)現(xiàn)狗和貓的叫聲是相同的,都是調(diào)用了父類(lèi)Cry()方法?,F(xiàn)在希望在同一個(gè)方法Cry()能夠體現(xiàn)出不同動(dòng)物的叫聲,那么在子類(lèi)就應(yīng)該重新描述Cry(),也就是重寫(xiě)Cry()方法。
重寫(xiě)方法就是修改它的實(shí)現(xiàn),或者在派生類(lèi)中對(duì)它進(jìn)行重寫(xiě)。在父類(lèi)中用virtual 關(guān)鍵字聲明的方法在子類(lèi)中可以重寫(xiě),就是虛擬方法。虛擬方法的語(yǔ)法如下:
訪(fǎng)問(wèn)修飾符 virtual 返回類(lèi)型 方法名()
{
//方法體
}
在父類(lèi)中聲明的虛擬方法,在子類(lèi)中重寫(xiě)時(shí)用override關(guān)鍵字,就是將virtual關(guān)鍵字改成override,然后修改方法體中的代碼即可。
我們修改上面的代碼:
using System; class Anmial { public virtual void Cry() { Console.WriteLine("這是動(dòng)物的叫聲"); } } class Dog: Anmial { public override void Cry() { Console.WriteLine("這是狗的叫聲汪汪"); } } class Cat: Anmial { public override void Cry() { Console.WriteLine("這是貓的叫聲喵喵"); } } class Test { static void Main() { Dog mydog = new Dog(); mydog.Cry(); Cat mycat = new Cat(); mycat.Cry(); Console.ReadKey(); } }
注意:父類(lèi)方法的訪(fǎng)問(wèn)級(jí)別和子類(lèi)重寫(xiě)方法的訪(fǎng)問(wèn)級(jí)別相同,即它們應(yīng)該有相同的訪(fǎng)問(wèn)修飾符。
例如:
public virtual void Hello()
不能重寫(xiě)為:
private override void Hello()
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C# 多線(xiàn)程對(duì)資源讀寫(xiě)時(shí)如何控制的方法
這篇文章主要介紹了C# 多線(xiàn)程對(duì)資源讀寫(xiě)時(shí)如何控制的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06C#中通過(guò)LRU實(shí)現(xiàn)通用高效的超時(shí)連接探測(cè)
這篇文章主要介紹了c#中通過(guò)LRU實(shí)現(xiàn)通用高效的超時(shí)連接探測(cè),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-11-11C#實(shí)現(xiàn)String類(lèi)型和json之間的相互轉(zhuǎn)換功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)String類(lèi)型和json之間的相互轉(zhuǎn)換功能,涉及C# json格式數(shù)據(jù)的構(gòu)造、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-09-09C# 封裝HtmlHelper組件:BootstrapHelper
這篇文章主要介紹了C# 封裝HtmlHelper組件之BootstrapHelper 的相關(guān)資料,需要的朋友可以參考下2016-08-08C#通過(guò)標(biāo)簽軟件Bartender的ZPL命令打印條碼
這篇文章介紹了C#通過(guò)標(biāo)簽軟件Bartender的ZPL命令打印條碼,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01