c# 多态实现_虚方法

实现方法: 虚方法, 抽象类, 接口

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),也可以不重写

posted @ 2017-11-07 17:43  墨竹daisy  阅读(836)  评论(0编辑  收藏  举报