虛方法與重寫方法的使用


C#中的多態性在實現時主要是通過在子類(派生類)中重寫基類的虛方法或函數成員來實現的,那么這里就遇到兩個概念,一個是虛方法,另一個是重寫方法,而這兩個方法也是多態中最重要的兩個概念,下面分別對它們進行講解。

1.虛方法

虛方法就是允許被其子類重新定義的方法,在聲明時,需要使用virtual修飾符。

注意:

1virtual修飾符不能與staticabstract或者override修飾符同時使用;

2)由於虛方法不能是私有的,所以,virtual修飾符不能與private修飾符同時使用。

  使用virtual修飾符聲明一個虛方法,用來計算兩個數的和,代碼如下:

public virtual int Add(int x, int y)                          //定義一個虛方法

{

    return x + y;                                                          //返回兩個數的和

}

2.重寫方法

如果一個方法聲明中含有override修飾符,則稱該方法為重寫方法,它主要用來使用相同的簽名重寫繼承的虛方法。虛方法主要用來引入新方法,而重寫方法則使從基類繼承而來的虛方法專用化(提供虛方法的具體實現)。

注意:

1override修飾符不能與newstatic或者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關鍵字調用基類中的虛方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM