淺談C#中虛方法與抽象方法的區別

前言:在前面的博文中,我介紹了C#中的虛方法與抽象方法,本博文將對兩者的區別進行詳細敘述。參考博文:淺談C#中虛方法與隱藏方法的區別深究C#中的抽象類、抽象屬性、抽象方法

一、虛方法的回顧

  1. 虛方法必須使用virtual修飾。
  2. 虛方法同抽象方法(abstract)一樣,使用override關鍵字重寫。
  3. 虛方法在子類中可以實現,也可以不實現。
  4. 虛方法必須有方法體哪怕是空的。
  5. 虛方法不能使用sealed修飾,否則不能重寫。

二、抽象方法的回顧

  1. 抽象方法是隱式的virtual方法。
  2. 只允許在抽象類中使用抽象方法聲明。
  3. 因爲抽象方法聲明不提供實實現,所以沒有方法體;方法聲明只是以一個分號結束,並且在簽名後沒有大括號 ({ })。例如:public abstract void MyMethod();
  4. 實現由overriding方法提供,它是非抽象類的成員。
  5. 在抽象方法聲明中使用static或virtual修飾符是錯誤的。

三、虛方法與抽象方法的區別

  1. 關鍵字不同抽象方法(abstract)虛方法(virtual)。
  2. 抽象方法必須在抽象類中,而虛方法不需要。
  3. 抽象方法在父類中不可以實現,虛方法可以實現。
  4. 抽象方法子類必須實現抽象方法,虛方法可以選擇實現或者不實現。

四、對於兩者區別的總結

抽象方法是隻有定義、沒有實際方法體的函數,它只能在抽象函數中出現,並且在子類中必須重寫;虛方法則有自己的函數體,已經提供了函數實現,但是允許在子類中重寫或覆蓋。重寫的子類虛函數就是被覆蓋了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章