多態是面向對象編程中三大機制之一,其原理建立在"從父類繼承而來的 子類可以轉換為其父類"這個規則之上,換句話說,能用父類的地方,就能用 該類的子類.當從父類派生了很多子類時,由於每個子類都有其不同的代碼實現, 所以當用父類來引用這些子類時,同樣的操作而可以表現出不同的操作結果,這就 是所謂的多態.
1.了解什麼是C#多態性
2.如何定義一個虛方法
3.如何重載一個虛方法
4.如何在程序中運用多態性
面向 對象程序設計中的另外一個重要概念是C#多態性。在運行時,可以通過指向基類 的指針,來調用實現派生類中的方法。 可以把一組對象放到一個數組中,然後 調用它們的方法,在這種場合下,多態性作用就體現出來了,這些對象不必是相 同類型的對象。當然,如果它們都繼承自某個類,你可以把這些派生類,都放到 一個數組中。 如果這些對象都有同名方法,就可以調用每個對象的同名方法。 本節課將向你介紹如何完成這些事情。
1.清單9-1. 帶有虛方法的基類: DrawingObject.cs
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
說明
清單9-1 定義了DrawingObject類。這是個可以讓其 他對象繼承的基類。該類有一個名為Draw()的方法。Draw()方法帶有一個 virtual修飾符,該修飾符表明:該基類的派生類可以重載該方法。 DrawingObject類的 Draw()方法完成如下事情:輸出語句"I'm just a generic drawing object."到控制台。
2.清單9-2. 帶有重載方法 的派生類:Line.cs, Circle.cs, and Square.cs
using System;
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
}
說明
清單9-2定義了三個類。這三個類 都派生自DrawingObject類。每個類都有一個同名Draw()方法,這些Draw()方法 中的每一個都有一個重載修飾符。重載修飾符可讓該方法在運行時重載其基類的 虛方法,實現這個功能的條件是:通過基類類型的指針變量來引用該類。