国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C#教程第九課:多態性

2024-07-21 02:22:18
字體:
來源:轉載
供稿:網友
本節課將介紹c#的多態性,其目的包括:
1.了解什么是多態性

2.如何定義一個虛方法

3.如何重載一個虛方法

4.如何在程序中運用多態性

面向對象程序設計中的另外一個重要概念是多態性。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。 可以把一組對象放到一個數組中,然后調用它們的方法,在這種場合下,多態性作用就體現出來了,這些對象不必是相同類型的對象。當然,如果它們都繼承自某個類,你可以把這些派生類,都放到一個數組中。 如果這些對象都有同名方法,就可以調用每個對象的同名方法。本節課將向你介紹如何完成這些事情。

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()方法中的每一個都有一個重載修飾符。重載修飾符可讓該方法在運行時重載其基類的虛方法,實現這個功能的條件是:通過基類類型的指針變量來引用該類。

3.清單9-3. 實現多態性的程序:drawdemo.cs

using system;
public class drawdemo
{
public static int main(string[] args)
{
drawingobject[] dobj = new drawingobject[4];
dobj[0] = new line();
dobj[1] = new circle();
dobj[2] = new square();
dobj[3] = new drawingobject();
foreach (drawingobject drawobj in dobj)
{
drawobj.draw();
}
return 0;
}
}

說明

清單9-3演示了多態性的實現,該程序使用了在清單 9-1 和清單9-2中定義的類。在drawdemo類中的main()方法中,創建了一個數組, 數組元素是drawingobject 類的對象。該數組名為dobj,是由四個drawingobject類型的對象組成。

接下來, 初始化dobj數組, 由于line, circle和square類都是drawingobject類的派生類,所以這些類可以作為dobj數組元素的類型。 如果c#沒有這種功能,你得為每個類創建一個數組。繼承的性質可以讓派生對象當作基類成員一樣用,這樣就節省了編程工作量。

一旦數組初始化之后,接著是執行foreach循環,尋找數組中的每個元素。在每次循環中, dobj 數組的每個元素(對象)調用其draw()方法。多態性體現在:在運行時,各自調用每個對象的draw()方法。盡管dobj 數組中的引用對象類型是drawingobject,這并不影響派生類重載drawingobject 類的虛方法draw()。 在dobj 數組中,通過指向drawingobject 基類的指針來調用派生類中的重載的draw()方法。

輸出結果是:

i'm a line.
i'm a circle.
i'm a square.
i'm just a generic drawing object.

在drawdemo 程序中,調用了每個派生類的重載的draw()方法。 最后一行中,執行的是drawingobject類的虛方法draw()。這是因為運行到最后,數組的第四個元素是drawingobject類的對象。

小結
現在對多態性有所了解之后,你可以在派生類中,實現一個重載基類虛方法的方法。虛方法和重載的派生類方法之間的關系就體現出c#的多態性。 
  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 科技| 贡山| 奉节县| 清新县| 邵东县| 旬邑县| 安宁市| 诸暨市| 北流市| 黑河市| 平武县| 清新县| 清丰县| 伊通| 印江| 尉犁县| 东乡| 彭山县| 环江| 越西县| 南皮县| 锦屏县| 历史| 汕头市| 胶州市| 台北市| 新兴县| 兴城市| 获嘉县| 贞丰县| 鹤山市| 南昌市| 滁州市| 安乡县| 云阳县| 津南区| 远安县| 东乡族自治县| 蓬安县| 合阳县| 赤水市|