重拾C 教程 多型性

2021-08-18 12:12:19 字數 2752 閱讀 1624

多型性意味著有多重形式。在物件導向程式設計正規化中,多型性往往表現為"乙個介面,多個功能"。

多型性可以是靜態的或動態的。在靜態多型性中,函式的響應是在編譯時發生的。在動態多型性中,函式的響應是在執行時發生的。

在編譯時,函式和物件的連線機制被稱為早期繫結,也被稱為靜態繫結。c# 提供了兩種技術來實現靜態多型性。分別為:

運算子過載將在下一章節討論,接下來我們將討論函式過載。

您可以在同乙個範圍內對相同的函式名有多個定義。函式的定義必須彼此不同,可以是引數列表中的引數型別不同,也可以是引數個數不同。不能過載只有返回型別不同的函式宣告。

下面的例項演示了幾個相同的函式print(),用於列印不同的資料型別:

using

system

;namespace",

i );

}void

print

(doublef)

",f);

}void

print

(strings)

",s);

}static

void

main

(string

args)}

}

當上面的**被編譯和執行時,它會產生下列結果:

printing

int:

5printing

float

:500.263

printing

string

:hello

c++

c# 允許您使用關鍵字abstract建立抽象類,用於提供介面的部分類的實現。當乙個派生類繼承自該抽象類時,實現即完成。抽象類包含抽象方法,抽象方法可被派生類實現。派生類具有更專業的功能。

請注意,下面是有關抽象類的一些規則:

下面的程式演示了乙個抽象類:

using

system

;namespace

class

rectangle

:shape

public

override

intarea ()}

class

rectangletester",

a);console

.readkey

();}

}}

當上面的**被編譯和執行時,它會產生下列結果:

rectangle

類的面積:

面積:70

當有乙個定義在類中的函式需要在繼承類中實現時,可以使用虛方法。虛方法是使用關鍵字virtual宣告的。虛方法可以在不同的繼承類中有不同的實現。對虛方法的呼叫是在執行時發生的。

動態多型性是通過抽象類虛方法實現的。

下面的程式演示了這點:

using

system

;namespace

public

virtual

intarea()}

class

rectangle

:shape

public

override

intarea ()}

class

********

:shape

public

override

intarea()}

class

caller",

a);}}

class

tester

}}

當上面的**被編譯和執行時,它會產生下列結果:

rectangle

類的面積:

面積:70

********

類的面積:

面積:25

多型:乙個介面多個功能。

靜態多型性:編譯時發生函式響應(呼叫);

動態多型性:執行時發生函式響應。

靜態繫結(早期繫結):編譯時函式和物件的連線機制。

兩種技術實現靜態多型性:函式過載/運算子過載。

函式過載:在同一範圍內對相同函式名有多個定義,可以是引數型別或引數個數的不同,但不許只有返回值型別不同。

運算子過載:

關鍵字 abstract 宣告抽象類:用於介面部分類的實現(派生類繼承抽象類時,實現完成)。抽象類包含抽象方法,抽象方法可被派生類實現。

抽象類規則:

關鍵字virtual宣告虛方法:用於方法在繼承類中的實現(在不同的繼承類中有不同的實現)。

抽象類和虛方法共同實現動態多型性。

注:繼承類中的重寫虛函式需要宣告關鍵字 override,在方法引數傳入中寫(類名 形參名)例如 public void callarea(shape sh),意思是傳入乙個 shape 型別的類。

virtual和abstract都是用來修飾父類的,通過覆蓋父類的定義,讓子類重新定義。

過載和重寫

過載(overload)是提供了一種機制, 相同函式名通過不同的返回值型別以及引數來表來區分的機制。

見:函式過載

重寫(override)是用於重寫基類的虛方法,這樣在派生類中提供乙個新的方法。

見:動態多型性

C 拾遺 多型性

參考資料 大部分轉的,作了少量編輯,補充點內容。在物件導向的概念中,多型性是指不同物件接收到相同訊息時,根據物件類的不同產生不同的動作。多型性提供了同乙個介面可以用多種方法進行呼叫的機制,從而可以通過相同的介面訪問不同的函式。具體地說,就是同乙個函式名稱,作用在不同的物件上將產生不同的操作。多型性提...

重拾C 教程 環境

在這一章中,我們將討論建立 c 程式設計所需的工具。我們已經提到 c 是 net 框架的一部分,且用於編寫 net 應用程式。因此,在討論執行 c 程式的可用工具之前,讓我們先了解一下 c 與 net 框架之間的關係。net 框架是乙個創新的平台,能幫您編寫出下面型別的應用程式 net 框架應用程式...

重拾C 教程 封裝

封裝被定義為 把乙個或多個專案封閉在乙個物理的或者邏輯的包中 在物件導向程式設計方 中,封裝是為了防止對實現細節的訪問。抽象和封裝是物件導向程式設計的相關特性。抽象允許相關資訊視覺化,封裝則使開發者實現所需級別的抽象。c 封裝根據具體的需要,設定使用者的訪問許可權,並通過訪問修飾符來實現。乙個訪問修...