程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#的面向對象特性:多態

C#的面向對象特性:多態

編輯:關於C#

多態 當初剛學C#的時候經常聽說,但一直都不懂,想必對於很多初學者也是如此吧!

多態表示不同的對象可以執行相同的動作,但要通過他們自己的實現代碼來執行。

看到執行執行相同的操作,我們都會想到繼承,其實多態也就是繼承,只不過高於繼承,子類繼承父類,繼承了父類的方法,但是怎麼樣把這個方法真正變成自己的,也就是說通過自己的代碼實現來執行,這裡我們就需要了解一些概念:虛方法和重寫

為了使子類的實例完全接替來自父類的成員,父類必須將該成員聲明為虛擬的。這是通過在該成員的返回類型之前添加virtual關鍵字來實現的。通常虛擬的是方法,但其實除了字段不能是虛擬的,屬性、事件和索引器都可以是虛擬的。盡管方法可以是虛擬的,但虛方法還是有方法體,表現父類的行為。然後,子類可以選擇使用override關鍵字,將父類實現替換為子類自己的實現,這就是方法重寫Override,或者叫做方法覆寫。

看一下代碼:

class Animal
    {
        public string Name { get; set; }
        public Animal(string name)
        {
            Name = name;
        }
    
        public virtual void Shout()
        {
            Console.WriteLine("我是父類 ");
        }
    }
    
    
    class Cat : Animal
    {
        public Cat(string name)
            : base(name)
        { 
                
        }
    
        public override void Shout()
        {
            Console.WriteLine("我的名字叫" + Name);
        }
         
    }
    
    class Dog : Animal
    {
        public Dog(string name)
            : base(name)
        {
    
        }
    
  }
static void Main(string[] args)
       {
           Animal animal1 = new Cat("小貓");
           Animal animal2 = new Dog("小狗");
           animal1.Shout();
           animal2.Shout();
           Console.ReadKey();
       }

運行是

我們可以看到子類如果重寫了父類的方法,那麼調用的就是自己的方法,如果沒有重寫,實現的還是父類的行為。

另外我們還要注意一點,這個對象的聲明必須是父類,而不是子類,實例化的是子類,這才能實現多態。多態的原理是當方法被調用時,無論對象是否被轉換為父類,都只有位於對象繼承連最末端的方法實現會被調用,也就是說,虛方法會按照其運行時,而非編譯時進行動態綁定調用的。

查看本欄目

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