「龍生蛇,鳳生雞,老鼠的兒子會吃雞」,這是自然界中的變異法則在起作用,物件導向語言借用了變異的思想方法,從而實現了多型性。
同一操作,作用於不同的物件,可以有不同的解釋,從而產生不同的執行結果,這就是多型性,也可以說是同乙個型別的例項呼叫相同的方法,產生的結果是不同的。c#多型性涉及到了過載、重寫、虛方法、抽象方法和隱藏方法,因此先對這些概念進行簡單總結。
(一、)過載(overload)
在同一作用域的兩個或多個方法函式名相同,引數列表不同的方法叫做過載。
過載的三個特點:
1、方法名必須相同
2、引數列表必須不相同
3、返回值型別可以不相同
public static int addnumber(int num1, int num2)
public static double addnumber(double num1, double num2)
(二、)重寫(override)
子類中為滿足自己的需要來重複定義某個方法的不同實現,需要用override關鍵字,被重寫的方法必須是虛方法,用的是virtual關鍵字。
重寫的特點是方法名、引數列表、返回值都相同。
//父類
public virtual void eatfood()
//子類
public override void eatfood()
(三、)虛方法
虛方法即為基類中定義的允許在派生類中重寫的方法,使用virtual關鍵字定義。
public virtual void eatfood()
虛方法呼叫
animal a = new animal();
a.eatfood();
(四、)抽象方法
在基類中定義的並且必須在派生類中重寫的方法,使用abstract關鍵字定義。抽象方法只能在抽象類中定義,且因抽象類無法例項化,抽象方法不能被呼叫。
public abstract class animal
public class pig : animal
}
pig pig = new pig();
pig.shout();
console.readkey();
抽象方法是用abstract修飾;抽象方法沒有方法體;抽象方法必須在抽象類中;父類是抽象類,子類繼承了這個類,必須把抽象類中的抽象方法重寫。
(五、)隱藏方法
在派生類中定義的和基類中的某個方法同名的方法,使用new關鍵字定義。如在基類animal中有一方法sleep():
public void sleep()
則在派生類cat中定義隱藏方法的**為:
new public void sleep()
隱藏方法不但可以隱藏基類中的虛方法,而且也可以隱藏基類中的非虛方法;隱藏方法中父類的例項呼叫父類的方法,子類的例項呼叫子類的方法。
以上就是c#多型性一些相關概念的簡單總結。。。
重寫前奏 繼承和多型
上次說到的過載是指同一類中方法和方法之間的關係,這次向大家介紹的重寫是子不同類中方法和方法的關係 在介紹重寫之前,要先說說繼承和多型 物件的繼承代表了 is a 的關係,a和b可以描述成b是a,就可以稱為b可以繼承a,不能相互顛倒。繼承者是被繼承者的特殊化。在繼承中,子類是派生類,父類是基類。子類不...
C 多型 繼承多型
什麼是多型?個人理解為 在程式語言繼承關係中,子類能替代父類,表現出不同的行為。換句話說 在繼承關係中,乙個類被例項化被其子類替代,子類中有父類的虛方法重寫,或者有父類同名方法 new 呼叫相同方法時候,將表現出子類或者父類中不同行為 老闆,上 static void main string arg...
R O R 開發前奏
裝好ruby以後,開啟命令列視窗輸入 ruby v 如果出現ruby的版本號 1.8.5 最新 就為安裝成功 出現版本號 1.2.2 最新 就為安裝成功,rails安裝在ruby目錄下 lib ruby gems 1.8 gems rails 1.2.2 如果你選用的開發ide是radrails的話...