C#中虛函數和抽象函數的區別

抽象方法:函數

使用abstract關鍵字 例如:public abstract bool Withdraw(…); spa

抽象方法是必須被派生類覆寫的方法。 對象

抽象方法是能夠當作是沒有實現體的虛方法,若是類中包含抽象方法,那麼類就必須定義爲抽象類。繼承

不管是否還包含其它通常方法。it


虛方法: 構造函數

使用virtual關鍵字 public virtual bool Withdraw(…); 方法

調用虛方法,運行時將肯定調用對象是什麼類的實例,並調用適當的覆寫的方法。 im

虛方法能夠有實現體若一個實例方法的聲明中含有 virtual 修飾符,則稱該方法爲虛擬方法;vi

一個虛擬方法的實現能夠由派生類取代。co

取代所繼承的虛擬方法的實現的過程稱爲重寫該方法;

在一個虛擬方法調用中,該調用所涉及的那個實例的運行時類型肯定了要被調用的到底是該方法的哪個實現。


虛函數的限制: 

1.虛函數僅適用於有繼承關係的類對象, 因此只有類的成員函數才能說明爲虛函數

2.靜態成員函數不能是虛函數

3.內聯函數不能是虛函數

4構造函數不能是虛函數

5.析構函數能夠是虛函數

簡單點說,抽象方法是須要子類去實現的。虛方法,是已經實現了,子類能夠去覆蓋,也能夠不覆蓋取決於實際的需求。

相關文章
相關標籤/搜索