【发布时间】:2015-04-02 06:43:42
【问题描述】:
我有以下课程:
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 中为方法Show() 使用任何override 关键字,但代码运行正常。那么override关键字的实际用途是什么。
【问题讨论】:
-
尝试员工 man = new Manager();和经理人 = 新经理();有和没有覆盖而不是 var man = new Manager();看看你是否还有问题。
-
这里的重点是compile-time中如何定义变量。当它已经被引用为
Manager(在您的情况下使用var)时,编译器知道调用Manager.Show。当您将man称为基本类型 (Employee) 时,多态性 开始发挥作用,现在virtual关键字告诉编译器在 runtime 中检查可能的重写方法i>(通常使用 vTable en.wikipedia.org/wiki/Virtual_method_table)。
标签: c#