轉:abstract、virtual、override…

abstract:可以和類、方法、屬性、索引器及事件一起使用。 在類聲明中使用 abstract 修飾符以指示某個類只能是其他類的基類。標記爲抽象或包含在抽象類中的成員必須通過從抽象類派生的類來實現。
複製代碼
 1abstract class Animals
 2轉:abstract、virtual、override關鍵字概念整理{
 3    abstract public void Run();
 4}

 5
 6class Cat: Animals
 7轉:abstract、virtual、override關鍵字概念整理{
 8    public override void Run()
 9轉:abstract、virtual、override關鍵字概念整理    {
10        Console.WriteLine("");
11    }

12}
複製代碼

抽象類具有如下特徵
1、抽象類不能實例化,泛指一類事物。
2、抽象類可以包含抽象方法和抽象訪問器。
3、不能用 sealed修飾符標示抽象類,這意味着抽象類不能被繼承。
4、從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實實現。

public abstract void MyMethod();

    

5、實現由一個重寫方法override提供,此重寫方法是非抽象類的一個成員。
6、在抽象方法聲明中不能使用 static 或 virtual 修飾符。
7、除了在聲明和調用語法上不同外,抽象屬性的行爲與抽象方法一樣。
8、在靜態屬性上不能使用 abstract 修飾符。
9、在派生類中,通過包括使用 override 修飾符的屬性聲明,可以重寫抽象的繼承屬性。

抽象類必須爲所有接口成員提供實現
實現接口的抽象類可以將接口方法映射到抽象方法上。
例如:

複製代碼
interface I 
{
    void M();
}
abstract class C: I 
{
    public abstract void M();
}
複製代碼

 Virtual:用於修飾方法、屬性、索引器或事件聲明,並且允許在派生類中重寫這些對象。例如,此方法可被任何繼承它的類重寫。
例如:

public virtual double Area() 
{
    return x * y;
}

備註:
1、調用虛方法時,將爲重寫成員檢查該對象的運行時類型。將調用大部分派生類中的該重寫成員,如果沒有派生類重寫該成員,則它可能是原始成員。
2、默認情況下,方法是非虛擬的。不能重寫非虛方法。
3、virtual 修飾符不能與 static、abstract, private 或 override 修飾符一起使用。
4、除了聲明和調用語法不同外,虛擬屬性的行爲與抽象方法一樣。
5、靜態屬性上不能使用 virtual 修飾符。
6、通過包括使用 override 修飾符的屬性聲明,可在派生類中重寫虛擬繼承屬性。


 

overrride:要擴展或修改繼承的方法、屬性、索引器或事件的抽象實現或虛實現,必須使用 override 修飾符。
範例:同上面第1段代碼範例。
備註:
1、override 方法提供從基類繼承的成員的新實現。通過 override 聲明重寫的方法稱爲重寫基方法。重寫的基方法必須與 override 方法具有相同的簽名。
2、不能重寫非虛方法或靜態方法。重寫的基方法必須是 virtual、abstract 或 override 的。
3、override 聲明不能更改 virtual 方法的可訪問性。override 方法和 virtual 方法必須具有相同的訪問級別修飾符。
4、不能使用修飾符 new、static、virtual 或 abstract 來修改 override 方法。
5、重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符、類型和名稱,並且被重寫的屬性必須是 virtual、abstract 或 override 的。

 ----------------------------------------------------------------------

總結:

    
C#關鍵字 類型 方法/屬性/事件 常量/字段
abstract 表示該類型不能構建實例 表示在構建派生類型的實例之前派生類型必須重寫並實現這個成員 N/a
virual N/a 表示這個成員可以由派生類型重寫 N/a
override N/a 表示派生類型重寫了基礎類型的成員 N/a

 

發佈了65 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章