【发布时间】:2011-04-29 11:05:16
【问题描述】:
public class Base1
{
public virtual void f()
{
Console.WriteLine("Base1.f()");
}
}
public class Derived1 : Base1
{
// Hides Base1.f() because 'override' was not specified
public new virtual void f()
{
Console.WriteLine("Derived1.f()");
}
}
public class Derived2 : Derived1
{
// Overrides Derived1.f()
public override void f()
{
Console.WriteLine("Derived2.f()");
// Call base method
base.f();
}
}
class Program
{
static void Main(string[] args)
Base1 ob1 = new Derived1();
ob1.f();
Base1 ob2 = new Derived2();
ob2.f();
Derived1 ob3 = new Derived2();
ob3.f();
Derived2 ob4 = new Derived2();
ob4.f();
}
}
// Calls Derived2.f() because Derived2 overrides Derived1().f()
Derived1 ob3 = new Derived2();
ob3.f();
期待
Base1 ob2 = new Derived2();
ob2.f();
- 派生2函数将被调用,但基类函数被调用 叫,这是什么原因。
- .net 是否使用 vtables
【问题讨论】:
-
请编辑您的问题以适当地格式化它 - 我自己会这样做,但我不知道您最后真正想要做什么。
-
@Jon 请坚持参加婚礼,Jon 一定可以在露营地参加!
-
@David:前段时间看了婚礼。现在回到帐篷里。
-
@Jon 据我所知,它仍在继续。我实际上是穿越大西洋到美国来逃避它,但这里的每一个电视频道都有!美国人只是喜欢你不会相信的英国皇室婚礼。
-
@David:这是我一直在认真思考的问题。我明白为什么英国人可能会对它感兴趣,我也明白为什么英裔美国人可能会关心它。但我根本无法理解为什么一个普通的老美国人会对英国皇室婚礼大发雷霆。我当然不...有一两分钟,我几乎担心这会让我成为一个坏人,但我克服了它。
标签: c# inheritance virtual-functions