iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
1
自我挑戰組

初心者學C#系列 第 25

Day 25:C#的多型 (‘∀’●)♡

  • 分享至 

  • xImage
  •  

※以下內容皆是新手撰寫,內容可能不完全正確

每次看到-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類別中的方法被衍生類別拿去用。以下是幾個抽象類的使用規則:

  • 不能創造抽象類的實例
  • 不能在抽象類之外宣告抽象方法
  • 類別密封(sealed)後則不能繼承其內容,但抽象類不能被密封
    想在某繼承類別中實施另一個類別的函式,便要用虛擬函式(virtual functions);在不同的繼承類別中,虛擬函式可能有不同的實施。

多型、繼承、封裝這三個抽象的概念就算不清楚在幹嘛,對實際寫成式應該暫時沒有太大的影響,所以這個有沒有看懂大概不是問題(邊寫程式邊用心去體會吧(?))

參考資料:
(a) Tutorialspoint; C# - Polymorphism
https://www.tutorialspoint.com/csharp/csharp_polymorphism.htm
(b) Techopedia; Polymorphism
https://www.techopedia.com/definition/3240/polymorphism-c


上一篇
Day 24:C#的繼承 [̲̅$̲̅(̲̅ ͡ಠ_ಠ)̲̅$̲̅]
下一篇
Day 26:C#的運算子多載 (。・ω・。)ノ♡
系列文
初心者學C#30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言