C 中abstract與virtual的用法

2022-01-31 18:15:59 字數 923 閱讀 9181

關於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修飾的方法不能有主體 子類必須...