概述:abstract 關鍵字 抽象類不能被實例化,抽象方法不能有方法體,抽象類中的所有抽象方法必須在子類中重寫(override ),一個抽象類可以同時包含抽象方法和非抽象方法。
abstract 修飾符可以和類、方法、屬性、索引器及事件一起使用。
在類聲明中使用 abstract 修飾符以指示類只能是其他類的基類。
抽象類具有以下特性:
在方法或屬性聲明中使用 abstract 修飾符以指示此方法或屬性不包含實現。
抽象方法具有以下特性:
public abstract void MyMethod();
除了在聲明和調用語法上不同外,抽象屬性的行為與抽象方法一樣。
抽象類必須為所有接口成員提供實現。
MSDN中C#語言規范的:10.1.1.1抽象類。此文如下:
abstract
修飾符用於表示所修飾的類是不完整的,並且它只能用作基類。抽象類與非抽象類在以下方面是不同的:
new
運算符是編譯時錯誤。雖然一些變量和值在編譯時的類型可以是抽象的,但是這樣的變量和值必須或者為 null
,或者含有對非抽象類的實例的引用(此非抽象類是從抽象類派生的)。當從抽象類派生非抽象類時,這些非抽象類必須具體實現所繼承的所有抽象成員,從而重寫那些抽象成員。在下面的示例中
abstract class A { public abstract void F(); } abstract class B: A { public void G() {} } class C: B { public override void F() { // actual implementation of F } }
抽象類 A
引入抽象方法 F
。類 B
引入另一個方法 G
,但由於它不提供 F
的實現,B
也必須聲明為抽象類。類 C
重寫 F
,並提供一個具體實現。由於 C
中沒有了抽象成員,因此可以(但並非必須)將 C
聲明為非抽象類。
那麼我們什麼時候應該用抽象類呢?
如果一個類設計的目點是用來被其它類繼承的,它代表一類對象的所具有的公共屬性或方法,那個這個類就應該設置為抽象類。