我有以下类别:在C#override关键字
namespace ConsoleApplication8
{
public abstract class Employee
{
public virtual void Show()
{
Console.WriteLine("from base.");
}
}
public class Manager:Employee
{
public void Show()
{
Console.WriteLine("from child.");
}
}
class Program
{
static void Main(string[] args)
{
var man=new Manager();
man.Show();
Console.ReadKey();
}
}
}
在这里,我还没有在派生类Manager
使用任何override
关键字的方法Show()
但代码运行正常。那么override
关键字的实际用途是什么。
尝试员工的人=新的经理();和经理man =新经理();有和没有覆盖,而不是var man = new Manager();看看你是否还有问题。 – 2015-04-02 06:46:43
这里的关键是如何在* compile-time *中定义的变量。当它已被引用为'Manager'(在你的情况下使用'var')时,编译器知道调用'Manager.Show'。当你引用'man'作为基类型('Employee')时,* Polymorphism *开始起作用,现在'virtual'关键字告诉编译器在* runtime *中检查可能的重写方法(通常使用vTable http:///en.wikipedia.org/wiki/Virtual_method_table)。 – haim770 2015-04-02 06:53:16