※以下內容皆是新手撰寫,內容可能不完全正確
每次看到-morphism結尾的字,總會想到「變形」或「變態」這樣的意思,不知一般人是否也會對特別的字根有印象(我在說什麼…)?有人說PIE(polymorphism、inheritance、encapsulation)是寫程式不一定要知道的概念,不過,隨緣吧,寫都寫了ಥ‿ಥ
多型(polymorphism) 字面上的意思是一個東西有很多型態,但在物件導向的程式設計法中(最前面有講到C#的程式設計法),多型也可說是「一個介面,數個功能」,不過程式設計法聽著都很抽象。另一個說法是,物件能為不同方法的實施提供獨特的平台。要說什麼情況下會出現多型的概念,大概是當物件中的方法成員們被呼叫時,物件做回應必須在運行時間看物件類型做判斷的 遲連結(late binding) ,
多型可以是 動態(dynamic) 或 靜態(static) 的,分 動態多型(dynamic polymorphism) 和 靜態多型(static polymorphism) ;前者於運行時間做回應,後者於編譯時間做回應。
靜態多型
物件在編譯時間和功能產生連結這件事叫做 早期連結(early binding) ,亦稱作 靜態連結(static binding) 。C#有兩種實施靜態多型的方式:
函數多載(function overloading) :固定範疇中,同樣名稱的功能可以被賦予多種不同的定義,而每個同名不同定義的功能不能只差在傳回類型,必須在類型或參數個數方面有別於彼此。
運算子多載(operator overloading) 是第二種方式,也是下一篇的主題~
動態多型
動態多型以 抽象類 和 虛擬函式 兩種方式處理。C#可以造出提供介面部分類別實施的抽象類別(abstract classes),而實施是在衍生類別繼承完畢之後完成的。abstract類別中的方法被衍生類別拿去用。以下是幾個抽象類的使用規則:
多型、繼承、封裝這三個抽象的概念就算不清楚在幹嘛,對實際寫成式應該暫時沒有太大的影響,所以這個有沒有看懂大概不是問題(邊寫程式邊用心去體會吧(?))
參考資料:
(a) Tutorialspoint; C# - Polymorphism
https://www.tutorialspoint.com/csharp/csharp_polymorphism.htm
(b) Techopedia; Polymorphism
https://www.techopedia.com/definition/3240/polymorphism-c