2016年8月29日 星期一

什麼是多型 (polymorphism)

所謂的"多型",指的是 runtime 時期執行的內容
在C#當中,有下列四種多型的意義,其中最常提及的就是OO的繼承式多型:
1). 繼承式多型 (inclusion)
在design time,可以用父類別型態容納子類別的物件,在 run time 進行函數呼叫時會呼叫到子類別的函數,重寫 (override) 父類方法

2). 泛型
List<T> 中的 T 就是參數型別,依據參數的型別決定實作的內容

3). 運算子多載 (overloading)
C#可以多載運算子 (ex: 可以重寫 == 的行為)

4). 強制同型 (coercions)
自動將型別轉換,ex: 在 run time 時 int 轉成double



"多型"與"動態繫結(Dynamic Binding)"是相關的, dynamic binding可利用(virtual function)來達。

1). 晚期繫結也稱之動態繫結(dynamic binding)。
簡單的說,就是物件的行為並不是在編譯時期 (compileir-time,就已經決定了。而是在程式執行時期於(晚期)(run-time)才動態地決定 的。如何動態地決定。就看物件當時的狀態(state)而定,物件封裝了所有可能的狀態處理 方法,並且根據外邊送來的訊息做出適當的反應。這也就是晚期連結的意義,這是物件導向 一個很重要的精神。

2).繫結
是將程式中所使用到的各名稱(包括程式名稱及變數名稱),分配到適當的記憶體位置。
其中在編譯過程中即完成連結的稱為靜態繫結(Static Binding),又稱為早期繫結(Early Binding)。如果是在程式執行過程中才完成繫結的,則稱為動態繫結(Dynamic Binding),又稱為延後繫結(Late Binding)。

沒有留言:

張貼留言