1. 繼承的類型:
- 實現繼承:表示一個類型派生於一個基類型,擁有該基類型的所有成員字段和函數。派生類型的每個函數采用基類型的實現代碼,除非在派生類型的定義中指定重寫該函數的實現代碼。
- 借口繼承:表示一個類型之繼承了函數的簽名,沒有繼承任何實現代碼。
2. 多重繼承
C#不支持多重實現繼承,允許類型派生於多個接口。
3. 虛方法
把一個基類函數聲明為virtual,該函數就可以在派生類中重寫。
4. 隱藏方法
如果簽名相同的方法在基類和派生類中都進行了聲明,但該方法沒有聲明為virtual和override,派生類方法就會隱藏基類方法。
C#中使用關鍵字new聲明我們要隱藏一個方法:
class MyDerivedClass : HisBaseClass
{
public new int MyGroovyMethod()
{
// some groovy implementation
return 0;
}
}
重載、重寫、隱藏的定義:
- 重載:同一個作用域內發生(比如一個類里面),定義一系列同名方法,但是方法參數列表不同。通過傳遞不同的參數來決定調用哪一個方法。
- 重寫:繼承時發生,在子類中重新定義父類中的方法。例如:基類方法聲明為virtual方法,派生類中使用override聲明此方法的重寫。
- 隱藏:基類方法不做聲明(默認為非虛方法),在派生類中使用new聲明方法的隱藏
重載時,根據參數選擇調用方法;
重寫時,訪問父類、子類皆調用子類的重寫方法;
隱藏式,訪問父類調用父類的方法,訪問子類則調用子類的方法。
比如父類A,有個方法標記為virtual,a(){} 子類B繼承A,也聲明一個方法a(){} 如果B里面的a()使用override,那么訪問A的方法時實際上調用了B里面聲明的方法,相當於A的方法被覆蓋了,new就不是,訪問A的a還是A里面定義的方法,訪問B就是B里面定義的方法.
其他關於virtual和override修飾符的重要信息:
- 重寫和被重寫的方法必須有相同的可訪問性。
- 不能重寫static 方法或非虛方法
- 方法、屬性、索引以及事件,都可以被聲明為virtual和override