1. 程式人生 > >c# 多態實現_虛方法

c# 多態實現_虛方法

write line ons lin nbsp lba clas blog class

實現方法: 虛方法, 抽象類, 接口

1、虛方法

  將父類的方法標記為虛方法,使用關鍵字virtual,這個方法可以被子類重新寫一遍。

  在父類的方法前面加上一個virtual,在子類的方法前面加上一個override;如果子類的方法前面不加override,編譯器不會報錯,但這樣的話,就無法通過父類來調用子類的方法,因為這個方法成了子類的獨有的方法,只是名字與父類相同而已,與父類無關。

  註意:如果需要對父類的方法進行重寫的話,一定要在子類的方法面前加上overrie進行修飾。

  什麽時候使用:幾個類可以提取出一個共同的父類,它們都要完成相同的事情,而且這個父類可以被實例化。

 

例如: 員工9點打卡,經理10點打卡,董事長11點打卡; 這幾個類共同的父類是員工類,它們都要完成打卡這件事情。

技術分享
    public class Employee
    {
        public virtual void DaKa()
        {
            Console.WriteLine("九點打卡");
        }
    }

    public class Manager : Employee
    {
        public override void DaKa()
        {
            Console.WriteLine("經理10點打卡");
        }
    }

    public class Chairman : Employee
    {
        public override void DaKa()
        {
            Console.WriteLine("董事長11點打卡");
        }
    }
技術分享 技術分享
            Employee emp = new Employee();
            Manager mg = new Manager();
            Chariman cm = new Chariman();
            Employee[] emps = { emp, mg,cm };
            for (int i = 0; i < emps.Length; i++)
            {
                emps[i].DaKa();
            }
            Console.ReadKey();
技術分享
  emps[i].DaKa(); 調用的依然是父類的方法 DaKa(),只不過該方法已經被子類重寫了。具體調用哪一個子類的DaKa()方法,取決於emp[i]裏面裝的是哪一個的子類對象。
  上面的代碼也體現了裏氏轉換原則,子類可以被賦值給父類。通過共同的父類,取消了各個子類之間的差異性。

2、使用虛方法需要註意的幾點:

  1)父類中如果有方法需要讓子類重寫,則可以將該方法標記為virtual

  2)虛方法在父類中必須有實現,哪怕是空實現

  3)虛方法子類可以重寫(override),也可以不重寫

c# 多態實現_虛方法