C#中的多態性在實現時主要是通過在子類(派生類)中重寫基類的虛方法或函數成員來實現的,那么這里就遇到兩個概念,一個是虛方法,另一個是重寫方法,而這兩個方法也是多態中最重要的兩個概念,下面分別對它們進行講解。
1.虛方法
虛方法就是允許被其子類重新定義的方法,在聲明時,需要使用virtual修飾符。
注意:
(1)virtual修飾符不能與static、abstract或者override修飾符同時使用;
(2)由於虛方法不能是私有的,所以,virtual修飾符不能與private修飾符同時使用。
例 使用virtual修飾符聲明一個虛方法,用來計算兩個數的和,代碼如下:
public virtual int Add(int x, int y) //定義一個虛方法
{
return x + y; //返回兩個數的和
}
2.重寫方法
如果一個方法聲明中含有override修飾符,則稱該方法為重寫方法,它主要用來使用相同的簽名重寫繼承的虛方法。虛方法主要用來引入新方法,而重寫方法則使從基類繼承而來的虛方法專用化(提供虛方法的具體實現)。
注意:
(1)override修飾符不能與new、static或者virtual修飾符同時使用,另外,重寫方法只能用於重寫基類中的虛方法,不能用來單獨聲明方法;
(2)重載和重寫是不相同的,重載是指編寫一個與已有方法同名,但參數列表不同的方法,而重寫是指在派生類中重寫基類的虛方法。
例 創建一個控制台應用程序,首先定義一個基類,並在其中定義一個虛方法,用來計算兩個數的和;然后使Program類繼承於BaseClass類,並在該類中重寫基類中的虛方法,使其實現計算3個數的和;最后在Main方法中,使用派生類對象實例化基類的一個對象,並使用該基類對象調用派生類中的方法,實現計算3個數的和。代碼如下:
class BaseClass //定義一個基類
{
public virtual int Add(int x, int y) //定義一個虛方法
{
return x + y; //返回兩個數的和
}
}
class Program:BaseClass //定義一個派生類,繼承於BaseClass
{
static int z = 0; //定義一個靜態變量,用來作為第3個被加數
public override int Add(int x, int y) //重寫基類中的虛方法
{
return base.Add(x, y) + z; //計算3個數的和
}
static void Main(string[] args)
{
z = 698; //為靜態變量賦值
BaseClass baseclass = new Program(); //使用派生類對象實例化基類對象
Console.WriteLine(baseclass.Add(98, 368)); //調用派生類中重寫之后的方法
Console.ReadLine();
}
}
說明:
在Main方法中使用基類對象調用的Add方法是在派生中重寫之后的方法,這主要是因為虛方法的實現由派生類中的重寫方法進行了取代。
技巧:
在派生類中重寫基類中的虛方法時,可以使用base關鍵字調用基類中的虛方法。