我一直在阅读有关virtual
方法的文档:
在虚拟方法调用中,发生该调用的实例的运行时类型决定了要调用的实际方法实现。在非虚拟方法调用中,实例的编译时类型是决定因素。准确地说,当在编译时类型为 C 和运行时类型为 R(其中 R 是 C 或从 C 派生的类)的实例上使用参数列表 A 调用名为 N 的方法时,调用是处理如下...: http: //msdn.microsoft.com/en-us/library/aa645767 (v=vs.71).aspx
但是,我注意到上面加粗的东西。假设我们有这样的代码:
class Planet{
public string Name;
public float Size;
public virtual void SpinPlanet(){
Console.WriteLine("Hoooraaay!!!");
}
}
class Earth : Planet{
}
在我的代码中某处我做:
Earth world = new Earth();
world.SpinPlanet();
在这种情况下:
- N是
SpinPlanet()
- C是
Earth
- R是
Planet
那么怎么会R
派生出编译时类型的类呢C
。基类类型不是在运行时解析的吗?