C#之Abstract、Vitrual、Override

00潤物無聲00發表於2014-12-28

Abstract        

    abstract修飾符可以和類、方法、屬性、索引器及事件一起使用。在類宣告中使用 abstract修飾符以指示某個類只能是其他類的基類。標記為抽象或包含在抽象類中的成員必須通過從抽象類派生的類來實現。

1.抽象類:

用它修飾的類稱為抽象類,抽象類不能例項化。

抽象類中,包括抽象方法,還可以有抽象屬性。(抽象屬性也必須改寫。)
非抽象類從抽象類中派生,必須通過改寫來實現所有繼承而來的抽象方法。

如果一個類,從抽象類中派生,但是沒有對抽象類中的方法進行實現的話,那麼這個類必須是抽象類。即派生類也是抽象類。

2.抽象方法:

抽象方法只能在抽象類中宣告。不能再使用static和virtual修飾

抽象方法只給出方法原形。不能在抽象方法中包含任何可執行程式碼,沒有方法體,用分號結束。

抽象方法在派生類中不能使用base關鍵字訪問。 

    class Program
    {
        static void Main()
        {
            DeriverC2 tt =new DeriverC2();       //例項化DeriverC類,抽象類不能例項化
            tt.function1();
        }
    }
    abstract class BaseC                         //抽象類;
    {
        public abstract void function1();        //抽象類中的抽象方法;
    }
    abstract class DeriveC1 : BaseC              //抽象類繼承抽象類;
    {
        public void function2() { }              //抽象類中的非抽象方法;
    }
    class DeriverC2 : BaseC                      //非抽象類繼承抽象類;
    {
        public override void function1()         //必須改寫;
        {
            Console.WriteLine ("類DeriverC2具體實現類BaseC的抽象方法function1()");
        }
    }

Virtual

    virtual關鍵字用於修飾方法、屬性、索引器或事件宣告,並且允許在派生類中重寫這些物件。

虛擬成員的實現可由派生類中的重寫成員更改。例如,此方法可被任何繼承它的類重寫。

預設情況下,方法是非虛擬的。不能重寫非虛方法

Override

override關鍵字要擴充套件或修改繼承的方法、屬性、索引器或事件的抽象實現或虛實現,必須使用override 修飾符。

override方法提供從基類繼承的成員的新實現。

通過override 宣告重寫的方法稱為重寫基方法。重寫的基方法必須與 override 方法具有相同的簽名。

不能重寫非虛方法或靜態方法。重寫的基方法必須是virtual、abstract 或 override 的。

override宣告不能更改 virtual 方法的可訪問性。override 方法和 virtual 方法必須具有相同的訪問級別修飾符。不能使用修飾符new、static、virtual 或 abstract 來修改 override 方法。

重寫屬性宣告必須指定與繼承屬性完全相同的訪問修飾符、型別和名稱,並且被重寫的屬性必須是virtual、abstract 或 override 的。

總結:

Abstract關鍵字能夠修飾類,抽象類不能例項化,抽象類可以繼承抽象類。

Virtual關鍵字修飾的虛方法和Abstract修飾的抽象方法的相同點是都用了override關鍵字進行重寫方法,不同點是抽象方法必須存在於抽象類中,而子類必須重寫,除非子類也是抽象的。

Override關鍵字,重寫的基方法必須和override方法名字相同,屬性也可以重寫,重寫屬性和繼承屬性有相同的訪問修飾符,型別和名稱。

相關文章