gpt4 book ai didi

c# - 为什么调用这个虚方法?

转载 作者:行者123 更新时间:2023-11-30 23:09:22 25 4
gpt4 key购买 nike

<分区>

我写了一个基类和两个派生类:

class Base
{
public virtual void fn()
{
Console.WriteLine("base fn");
}
}

class Derived1 : Base
{
public override void fn()
{
Console.WriteLine("derived1 fn");
}
}

class Derived2 : Derived1
{
public new void fn()
{
Console.WriteLine("derived2 fn");
}
}

然后创建一个 derived2 的实例,由一个 Base 变量引用。然后调用 fn() 方法:

class Program
{
static void Main(string[] args)
{
Base b = new Derived2();
b.fn();
Console.Read();
}
}

结果是调用了Derived1类的fn()

据我所知,如果调用虚方法,CLR会在运行时类型的方法表中寻找该方法,即Derived2;如果调用了一个非虚方法,ClR会在变量类型为Base的方法表中寻找它。但是为什么会调用Derived1的方法呢?

答案“因为 Derived1 覆盖了 Base 的 fn()”不足以澄清我的困惑。请给我更多详细信息。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com