本文實例講述了C#使用虛擬方法實現多態。分享給大家供大家參考。具體分析如下:
我們看一個例子,假若有一個動物類,類中用方法cry()描述動物的叫聲,不同的動物的叫聲是不一樣的。根據繼承的特征,把類中公共部分的內容放在父類中,那么cry()方法就應該放在父類中,根據這樣的思路編寫程序如下:
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();}}
運行后發現狗和貓的叫聲是相同的,都是調用了父類Cry()方法?,F在希望在同一個方法Cry()能夠體現出不同動物的叫聲,那么在子類就應該重新描述Cry(),也就是重寫Cry()方法。
重寫方法就是修改它的實現,或者在派生類中對它進行重寫。在父類中用virtual 關鍵字聲明的方法在子類中可以重寫,就是虛擬方法。虛擬方法的語法如下:
訪問修飾符 virtual 返回類型 方法名()
{
//方法體
}
在父類中聲明的虛擬方法,在子類中重寫時用override關鍵字,就是將virtual關鍵字改成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#程序設計有所幫助。
新聞熱點
疑難解答