【C#】什么時候使用virtual什么時候使用abstract


一、C#中virtual與abstract的區別

C#的virtual & abstract經常讓人混淆,這兩個限定詞都是為了讓子類進行重新定義,覆蓋父類的定義。但是用法上差別很大。

a)     virtual修飾的方法必須有方法實現(哪怕只有一對大括號),abstract修飾的方法不能有實現。

b)    virtual可以被子類重寫,abstract必須被子類重寫

c)     如果類中的某一函數被abstact修飾,則類名也必須用abstact修飾

d)    Abstract修飾的類不能被創建實例。

e)     C#中如果准備在子類重寫父類的方法,則該方法在父類中必須用virtual修飾,在子類中必須用overide修飾。

注:用abstract修飾的類只能被繼承不能夠被實例化。

二、什么時候使用virtual什么時候使用abstract

a)  virtual重點是實現多態,同一個方法能做不同的事情,也就是當一個方法會有不同的操作的時候要用virtual,例如:支付方法 pay(),可能通過微信去支付、也可能通過支付寶或者其他方式去支付,這個時候定義pay()方法的時候最好是用virtual修飾。

b) 作為一個必須存在的方法的時候用abstract,比如要定義一個人類對象Class Person{}和一個鳥類對象Class Bird{},人是動物,鳥也是動物,所以一般會先定義一個共同的基類Class animal{},然后讓人類和鳥類對象都繼承這個基類。這個基類可以有共通的屬性和方法,比如行走方法walk(),發聲方法voice(),在基類中這兩個方法都是不需要實現的,只需要在PersonBird類中實現就可以了【Person和Bird類必需要實現這兩個方法,這也保證了所有繼承animal類的類都需要有walk()和voice()方法】,所以定義walk()voice()方法的時候可以用abstract修飾

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM