【发布时间】:2013-02-14 23:04:14
【问题描述】:
有人可以向我解释为什么当我将类转换为基类时会调用被覆盖的方法:
class Base
{
public virtual void VirtualMethod()
{
Console.WriteLine("Base virtual method");
}
}
sealed class Derived : Base
{
public override void VirtualMethod()
{
Console.WriteLine("Overriden method");
}
}
static void Main(String[] args)
{
Derived d = new Derived();
((Base)d).VirtualMethod();
}
我的意思是这段代码打印:
Overriden method
而不是
Base virtual method
它是运行时还是编译时的未来?
我知道我可以通过调用base.VirtualMethod() 从派生中调用 Base 的虚拟方法,但我可以从外部调用它吗? (比如来自Main 或其他类)
【问题讨论】:
-
请尝试理解@Jon Skeet 的回答。他是完全正确的。设计原因是数十年的丰富经验和拼命寻找更好的编写代码的方法。 “幕后”/机械原因在某种程度上是无关紧要的,因为所有支持 OOP 的语言和运行时都具有相同的行为(至少在涉及虚拟方法时),并且每种语言和运行时都以不同的方式实现。关于你的第二个问题,请看:stackoverflow.com/questions/437926/…
标签: c# virtual base derived-class