c 複習 虛方法 重寫方法和抽象方法 官方解釋

2022-03-24 09:13:38 字數 2046 閱讀 7449

若乙個例項方法的宣告中含有

virtual

修飾符,則稱該方法為虛方法

(virtual method)

。若其中沒有

virtual

修飾符,則稱該方法為非虛方法

(non-virtual method)

。在呼叫乙個虛方法時,該呼叫所涉及的那個例項的執行時型別

(runtime type)

確定要呼叫該方法的哪乙個實現。在非虛方法呼叫中,例項的編譯時型別

(compile-time type)

負責做出此決定。

虛方法可以在派生類中重寫

(override)

。當某個例項方法宣告包括

override

修飾符時,該方法將重寫所繼承的具有相同簽名的虛方法。虛方法宣告用於引入新方法,而重寫方法宣告則用於使現有的繼承虛方法專用化(通過提供該方法的新實現)。

抽象(abstract)

方法是沒有實現的虛方法。抽象方法使用

abstract

修飾符進行宣告,並且只允許出現在同樣被宣告為

abstract

的類中。抽象方法必須在每個非抽象派生類中重寫。

下面的示例宣告乙個抽象類

expression

,它表示乙個表示式目錄樹節點;它有三個派生類

constant

、variablereference

和operation

,它們分別實現了常量、變數引用和算術運算的表示式目錄樹節點

code

public

abstract

class

expression

public

class

constant : expression

public

override

double

evaluate(hashtable vars)

}public

class

variablereference : expression

public

override

double

evaluate(hashtable vars)

return

convert.todouble(value);}}

public

class

operation : expression

public

override

double

evaluate(hashtable vars)

throw

newexception(

"unknown operator");

}}**中呼叫了

expression

例項的evaluate

方法,以計算給定表示式的值,從而生成乙個

double

值。該方法接受乙個包含變數名稱(作為雜湊表項的鍵)和值(作為項的值)的

hashtable

作為引數。

evaluate

方法是乙個虛抽象方法,意味著非抽象派生類必須重寫該方法以提供具體的實現。

constant

的evaluate

實現只是返回所儲存的常量。

variablereference

的實現在雜湊表中查詢變數名稱,並返回產生的值。

operation

的實現先對左運算元和右運算元求值(通過遞迴呼叫它們的

evaluate

方法),然後執行給定的算術運算。

下面的程式使用

expression

類,對於不同的x和

y 值,計算表示式x*

(y+2)的值。

code

static

void

main(

string

args)

虛方法 重寫方法和抽象方法

若乙個例項方法的宣告中含有 virtual 修飾符,則稱該方法為虛方法 virtual method 若其中沒有 virtual 修飾符,則稱該方法為非虛方法 non virtual method 在呼叫乙個虛方法時,該呼叫所涉及的那個例項的執行時型別 runtime type 確定要呼叫該方法的哪...

C 虛方法和抽象方法

虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...

C 虛方法和抽象方法

虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...