【发布时间】:2011-01-05 03:58:06
【问题描述】:
我对@987654321@/new/override 这件事有点困惑。这是一个例子:
class A
{
public virtual void mVVirtual() { Console.WriteLine("A::mVVirtual"); }
}
class B : A
{
public virtual void mVVirtual() { Console.WriteLine("B::mVVirtual"); }
}
class C : B
{
public override void mVVirtual() { Console.WriteLine("C::mVVirtual"); }
}
class Test
{
static void Main()
{
B b1 = new C();
b1.mVVirtual(); //C::mVVirtual ... I understand this
A a2 = new C();
a2.mVVirtual(); //A::mVVirtual ... ???
}
}
我不明白为什么在第二次通话中我们得到A::mVVirtual。我通常用这个“算法”来处理这些问题:
- 检查保存对象引用的变量类型,以获取名为
mVVirtual的实例方法?没有……但确实有一个带有该签名和名称的虚拟方法! - 虚拟方法?然后让我们检查
a2(C) 持有的对象的类型,以覆盖该方法。它有一个 -> 执行C::mVVirtual!
我的“算法”哪里错了?我真的对此感到困惑,非常感谢一些帮助。
【问题讨论】:
-
@John Gietzen:我指的是我在处理这些问题时的思路……如果你愿意,它是一种心理算法。到目前为止它对我有用,但这个问题真的很困扰我。
-
算法 - 一组有限的明确指令,以规定的顺序执行以实现目标。在我看来,这很像一个算法,约翰。
标签: c# virtual overriding new-operator keyword