程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 【CSharp】一個讓你了解csharp的多態的程序

【CSharp】一個讓你了解csharp的多態的程序

編輯:C#基礎知識

using System;
class A
{
    public void show()
    {
        Console.WriteLine("A.show");
    }
    public virtual void play()   //定義為“virtual”,表明可以過載,不能過載非虛函數
    {
        Console.WriteLine("A.play");
    }
}
class B : A
{
    public void show()  //覆蓋(隱藏)A中的show方法,不加“show”,會編譯警告
    {
        Console.WriteLine("B.show");
    }
    public override void play()   //過載A中的play方法,如果不加“override”,警告。
    {
        Console.WriteLine("B.play");
    }
}
class C : A
{
    new public void show()    //隱藏A中的show方法,加“show”,不會編譯警告
    {
        Console.WriteLine("C.show");
    }
    new public void play()  //隱藏A中的play方法,但是不構成過載,相當於另一個方法
    {
        Console.WriteLine("C.play");
    }
}
class D
{
    public static void Main(string[] args)
    {
        A a = new A();
        B b = new B();
        C c = new C();

        a.show();
        a.play();

        b.show();
        b.play();

        c.show();
        c.play();

        a = b;
        a.show();
        a.play();

        a = c;
        a.show();
        a.play();
    }
}
輸出結果為:
A.show
A.play
B.show
B.play
C.show
C.play
A.show
B.play
A.show
A.play

注:在翻譯中,作者對“override”,“new”,“overload”的翻譯比較混亂,比如都有“覆蓋”,“隱藏”,“重載”,“過載”等,但是個人認為:
override----過載
new---------覆蓋、隱藏
overload---重載
比較貼切,當然,如何翻譯並不重要,關鍵是區別他們之間的區別。
override 的方法必須是:被聲明為virtual的方法,其中可以過載,也可以不過載;被聲明為abstract的方法,必須被override方法過載。過載之後可以實現多態性-動態聯編。
new:聲明的方法用於隱藏基類中聲明的同名函數,它與基類中的同名函數沒有任何關系,僅僅同名而已。與多態無關。
overload:重載,就是定義不同簽名的同名方法,也是多態性的一種表現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved