2011-01-06 67 views

回答

7

抽象意味着派生類被迫實現它,而虛擬這不是這種情況(它可以但不是必需的)。這源於這樣一個事實,即一個抽象方法在虛擬方法中沒有關聯主體。

+0

你可以作爲去至於說抽象方法也是一種(特殊的)虛擬方法。 – GolezTrol 2011-01-06 09:50:10

0

通過將成員定義爲抽象,您正在定義一種佔位符,而不提供任何默認實現。任何與基類交互的客戶端代碼仍然可以引用抽象佔位符成員,在知道實例的具體類必須提供具體實現的情況下是安全的。

通過將成員定義爲虛擬,可以啓用派生類來提供一個將覆蓋基類的實現。區別在於,如果派生類不提供自己的實現,則將使用基類中的實現。

考慮下面的C#示例類:

abstract class TaskBase { 
    public abstract void RunTask(); 
} 

class RoadNetwork { 
    public string GetCorrectSideToDriveOn() { return "left"; } 
} 

TaskBase類的設計迫使派生類中提供自己的執行RunTask()因爲代碼不會沒有它編譯。設計師有效地說:「任務必須可以運行,但您必須提供實施,因爲沒有有意義的默認設置。」

RoadNetwork類的設計原理不同:人誰實現了RoadNetwork會自動使用道路的正確一邊開車,除非他們專門選擇開車在錯誤的一邊;)