LOSo講解
C#
在Microsoft Docs對多型的介紹中,我們可以了解其就是"多種形狀"的意思。
通常,多型指的就是一個位於基底類別的方法,但在不同的繼承類別裡同樣方法有不一樣的實質內容。在此舉個比較好了解的例子:
有一位生物老師教導了三個學生,要求他們對這棵樹進行介紹,結果三個學生的想法如下:
A學生: 這棵樹會長果子。
B學生: 這棵樹有鬚根。
C學生: 這棵樹的根系很廣。
這三個同學的回答都不一樣,但他們都對這棵樹有正確的介紹。此時給他們白紙寫出想法時,就會得到這三種答案。
在這個故事裡,每個舉例出來的人和事物在接下來要說明的程式裡都是有角色的。
這些內容可以被C#時做出來的。
首先,我們先配置一個這樣的視窗:
這樣就可以開始程式的部分,
我們先建立一個名稱為"生物老師"的基底類別。
在這個基底類別,我們建立了"樹的介紹"方法。而這個方法為虛擬方法(virtual method),因為我們要讓接下來的繼承類別去覆寫(override)這個方法。
接著,我們再建立A、B、C學生的類別,並且使他們都繼承了"生物老師"類別。
在這些類別裡,每個學生都覆寫了"樹的介紹"這個方法,並且回傳各自的答案。
在我們最初的Form1類別,增添這個宣告:
最後我們使"白紙"這個button的click事件如下:
執行程式後,按下按鈕後就會有以下的顯示。
一開始我聽到"多載"這個詞時,第一個想到的是車子的多乘載。但是,再仔細想一想,兩者確實有些許相同之處。多載的方法是同一個名稱的方法,在接收參數的數量或型別種類必須不同;回傳值的型別可以不同;方法裡的內容也可以不同。就像是同一台車,可以載兩個人或三個人(接收參數),在車子裡做不同事情(方法裡的不同內容),車子可以是停著的或開往不同方向(不同的回傳值)。這樣形容是不是很貼切呢?
言歸正傳,說這麼多到底要如何實現?
以下為多載方法的示意圖
這段程式中"前進"跟"行徑方向"是自定義的列舉(enum)資料型別。這些方法的名稱都叫"車子",但是在使用上卻有許多不同之處。
而就如我們使用平常的方法一樣,我們可以在呼叫方法時給予多載裡所宣告不同的型別的參數,並且可以接收所宣告型別的參數。
多型和多載在概念和使用上,有時會遭到誤解。但是只要掌握一些原則就很容以把兩者劃分開來。像是多型是位於不同類別的相同方法;而多載是位於同個類別名稱相同的方法,同時擁有不同的輸入參數(數目或型別)。在使用上,兩者都可以執行方法裡的不同內容。