C#继承 - 为什么要使用override和virtual?

Pat*_*ryk 1 c# inheritance

我已经用C++编程了一段时间,现在我开始使用C#,但我无法理解virtualoverride关键字.由于指针和所有与它相关的内容大部分都来自C++,我们真的不需要它们吗?或者我错过了一些C#编程的重点.

示例:

namespace ConsoleApplication1
{
    public class Employee
    {
        public virtual void GetPayCheck()
        {
            Console.WriteLine("employee gets his pay check ");
        }

        public void Work()
        {
            Console.WriteLine("employee works ");
        }
    }
    public class Manager : Employee
    {
        public override void GetPayCheck()
        {
            Console.WriteLine("MANAGER gets his pay check ");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Employee emp = new Employee();
            Manager exec = new Manager();
            emp.Work();
            exec.Work();
            emp.GetPayCheck();
            exec.GetPayCheck();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

即使我省略了虚拟或覆盖关键字(或两者),我仍然得到相同的输出.我是什么

Con*_*ell 6

使用virtualoverride允许您完全替换Work方法,无论变量声明为什么类型.如果某个方法声明为virtual,则CLR会检查该对象是否为派生类,以及该方法是否已被覆盖.如果方法不是虚拟的,则CLR只使用Work声明该对象的类型的名称调用该方法.

    static void Main(string[] args)
    {
        Employee emp = new Employee();
        Manager exec = new Manager();

        DoWork(emp); // employee works and gets pay check
        DoWork(exec); // if virtual and override are used, MANAGER get pay check
                      // however, if you don't override the method, DoWork
                      // will treat the argument as an Employee.
    }

    static void DoWork(Employee emp)
    {
        emp.Work();
        emp.GetPayCheck();
    }
Run Code Online (Sandbox Code Playgroud)