C 中Abstract和Virtual的區別

2022-03-12 20:17:23 字數 1075 閱讀 4779

c# 中 abstract和virtual比較容易混淆,都與繼承有關,並且涉及override的使用。下面討論一下二者的區別:

一、virtual方法(虛方法)

virtual 關鍵字用於在基類中修飾方法。virtual的使用會有兩種情況:

情況1:在基類中定義了virtual方法,但在派生類中沒有重寫該虛方法。那麼在對派生類例項的呼叫中,該虛方法使用的是基類定義的方法。

情況2:在基類中定義了virtual方法,然後在派生類中使用override重寫該方法。那麼在對派生類例項的呼叫中,該虛方法使用的是派生重寫的方法。

二、abstract方法(抽象方法)

abstract關鍵字只能用在抽象類中修飾方法,並且沒有具體的實現。抽象方法的實現必須在派生類中使用override關鍵字來實現。

介面和抽象類最本質的區別:抽象類是乙個不完全的類,是對物件的抽象,而介面是一種行為規範。

三、關鍵字

static:當乙個方法被宣告為static時,這個方法是乙個靜態方法,編譯器會在編譯時保留這個方法的實現。也就是說,這個方法屬於類,但是不屬於任何成員,不管這個類的例項是否存在,它們都會存在。就像入口函式static void main,因為它是靜態函式,所以可以直接被呼叫。

virtua:當乙個方法被宣告為virtual時,它是乙個虛擬方法,直到你使用classname variable = new classname();宣告乙個類的例項之前,它都不存在於真實的記憶體空間中。這個關鍵字在類的繼承中非常常用,用來提供類方法的多型性支援。

overrride:表示重寫 這個類是繼承於shape類

virtual,abstract是告訴其它想繼承於他的類 你可以重寫我的這個方法或屬性,否則不允許。

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

C 中的abstract 類和方法

c 中的abstract類不能被例項化,他只提供其他類的繼承的介面 using system abstract class myabs class myclass myabs class myclient 乙個抽象類可以包含abstract方法,也可包含例項化方法,但繼承類 非抽象 必須實現abst...