C#使用虛擬方法實現(xiàn)多態(tài)
本文實例講述了C#使用虛擬方法實現(xiàn)多態(tài)。分享給大家供大家參考。具體分析如下:
我們看一個例子,假若有一個動物類,類中用方法cry()描述動物的叫聲,不同的動物的叫聲是不一樣的。根據(jù)繼承的特征,把類中公共部分的內(nèi)容放在父類中,那么cry()方法就應該放在父類中,根據(jù)這樣的思路編寫程序如下:
using System; class Anmial { public void Cry() { Console.WriteLine("這是動物的叫聲"); } } class Dog: Anmial { public void Run() { Console.WriteLine("狗路得快"); } } class Cat: Anmial { public void Look() { Console.WriteLine("貓長得乖"); } } class Test { static void Main() { Dog mydog = new Dog(); mydog.Cry(); mydog.Run(); Cat mycat = new Cat(); mycat.Cry(); mycat.Look(); Console.ReadKey(); } }
運行后發(fā)現(xiàn)狗和貓的叫聲是相同的,都是調(diào)用了父類Cry()方法。現(xiàn)在希望在同一個方法Cry()能夠體現(xiàn)出不同動物的叫聲,那么在子類就應該重新描述Cry(),也就是重寫Cry()方法。
重寫方法就是修改它的實現(xiàn),或者在派生類中對它進行重寫。在父類中用virtual 關(guān)鍵字聲明的方法在子類中可以重寫,就是虛擬方法。虛擬方法的語法如下:
訪問修飾符 virtual 返回類型 方法名()
{
//方法體
}
在父類中聲明的虛擬方法,在子類中重寫時用override關(guān)鍵字,就是將virtual關(guān)鍵字改成override,然后修改方法體中的代碼即可。
我們修改上面的代碼:
using System; class Anmial { public virtual void Cry() { Console.WriteLine("這是動物的叫聲"); } } 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(); } }
注意:父類方法的訪問級別和子類重寫方法的訪問級別相同,即它們應該有相同的訪問修飾符。
例如:
public virtual void Hello()
不能重寫為:
private override void Hello()
希望本文所述對大家的C#程序設(shè)計有所幫助。
相關(guān)文章
C#實現(xiàn)String類型和json之間的相互轉(zhuǎn)換功能示例
這篇文章主要介紹了C#實現(xiàn)String類型和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-08