標籤:c#
1、什麼是多態
物件導向程式設計中的另外一個重要概念是多態性。在運行時,可以通過指向基類的指標,來調用實現衍生類別中的方法。可以把一組對象放到一個數組中,然後調用它們的方法,在這種場合下,多態性作用就體現出來了,這些對象不必是相同類型的對象。當然,如果它們都繼承自某個類,你可以把這些衍生類別,都放到一個數組中。如果這些對象都有同名方法,就可以調用每個對象的同名方法。
同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果,這就是多態性。多態性通過衍生類別重載基類中的虛函數型方法來實現。在物件導向的系統中,多態性是一個非常重要的概念,它允許客戶對一個對象進行操作,由對象來完成一系列的動作,具體實現哪個動作、如何?由系統負責解釋。
2、實現多態
多態性是類為方法(這些方法以相同的名稱調用)提供不同實現方式的能力。多態性允許對類的某個方法進行調用而無需考慮該方法所提供的特定實現。
可以用不同的方式實現組件中的多態性:
● 介面多態性。
● 繼承多態性。
● 通過抽象類別實現的多態性。
樣本:實現多態性的程式
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{ public class DrawingBase{ public virtual void Draw(){ Console.WriteLine("I‘m just a generic drawing object.");}} public class Line : DrawingBase{ public override void Draw(){ Console.WriteLine("I‘m a Line.");}} public class Circle : DrawingBase{ public override void Draw(){ Console.WriteLine("I‘m a Circle.");}} public class Square : DrawingBase{ public override void Draw(){ Console.WriteLine("I‘m a Square.");}} public class DrawDemo{ public static int Main(string[] args){ DrawingBase[] dObj = new DrawingBase[4]; dObj[0] = new Line(); dObj[1] = new Circle(); dObj[2] = new Square(); dObj[3] = new DrawingBase(); foreach (DrawingBase drawObj in dObj)drawObj.Draw(); Console.ReadLine(); return 0;}}}
輸出結果是:
I‘m a Line.
I‘m a Circle.
I‘m a Square.
I‘m just a generic drawing object.
程式說明:上面程式示範了多態性的實現。在DrawDemo類中的Main( )方法中,建立了一個數組,數組元素是DrawingBase類的對象。該數組名為dObj,是由四個DrawingBase類型的對象組成。接下來,初始化dObj數組,由於Line,Circle和Square類都是DrawingBase類的衍生類別,所以這些類可以作為dObj數組元素的類型。如果C#沒有這種功能,你得為每個類建立一個數組。繼承的性質可以讓派生對象當作基類成員一樣用,這樣就節省了編程工作量。一旦數組初始化之後,接著是執行foreach迴圈,尋找數組中的每個元素。在每次迴圈中,dObj 數組的每個元素(對象)調用其Draw()方法。多態性體現在:在運行時,各自調用每個對象的Draw()方法。儘管dObj數組中的引用物件類型是DrawingBase,這並不影響衍生類別重載DrawingBase類的虛方法Draw()。在dObj 數組中,通過指向DrawingBase基類的指標來調用衍生類別中的重載的Draw( )方法。
參考:
http://blog.csdn.net/hliq5399/article/details/6305335
本文出自 “Ricky's Blog” 部落格,請務必保留此出處http://57388.blog.51cto.com/47388/1652450
24. C# -- 多態性