我已经用C++编程了一段时间,现在我开始使用C#,但我无法理解virtual和override关键字.由于指针和所有与它相关的内容大部分都来自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)
即使我省略了虚拟或覆盖关键字(或两者),我仍然得到相同的输出.我是什么
使用virtual并override允许您完全替换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)