關於c#中的abstract與virtual的用法一直迷糊。於是自己動手寫一寫試試。
1.第一種情況
//抽象動物類,宣告抽象方法shout(),注意抽象方法沒有方法體abstract class animal
// 貓類,繼承動物類,覆蓋抽象shout()方法class cat:animal
public override void shout()
}
// 狗類,繼承動物類,覆蓋抽象shout()方法class dog:animal
public override void shout()
}
// 客戶程式呼叫執行結果如下:static void main(string args)
2.第二種情況
如果用virtual,animal類則修改如下,注意虛方法要有方法體。
abstract class animal執行結果依舊:}
在第一種情況下,由於子類必須要實現基類的抽象方法,所以如果把cat類的shout()方法去掉,程式編譯會報錯。
但是在第二種情況下,如果把cat類的shout()方法去掉,則客戶端沒有覆蓋基類的shout()方法,cat.shout()會呼叫基類的shou()方法。執行結果如下:
C 中virtual與abstract的區別
c virtua關鍵字用於修改方法 屬性 索引器或事件宣告,並使它們可以在派生類中被重寫。例如,此方法可被任何繼承它的類替代。不能將c virtual修飾符與以下修飾符一起使用 static abstract override c 的virtual 和 abstract經常讓人混淆,這兩個限定詞都是...
C 中Abstract和Virtual使用
1.abstract 抽象類 應該算是介面和類的中間型別 2.abstract使用時被子類繼承 3.abstract無法例項化 4.abstract使用位置應該是 架構的最底層,用來實現一些公用方法 5.abstract類中可以有非abstract修飾的方法和屬性 6.繼承abstract類的子類一...
C 中 virtual 和 abstract 區別
1 這兩個都是用來修飾類和方法的 2 都不能用private修飾 3 virtual 虛擬 abstract 抽象 4 virtual修飾的方法必須有主體 而且子類可以不去實現這個方法 如果子類不重寫這個虛函式 在子類裡呼叫這個方法呼叫的是父類裡的 5 abstract修飾的方法不能有主體 子類必須...