考虑以下几个类和接口:
class Program
{
interface I { void foo(); }
abstract class A : I
{
public virtual void foo() { Console.WriteLine("A"); }
}
class B : A
{
public new virtual void foo() { Console.WriteLine("B"); }
}
class C : B
{
public override void foo() { Console.WriteLine("C"); }
}
static void Main(string[] args)
{
var c = new C();
(c as I).foo();
(c as A).foo();
(c as B).foo();
}
}
它输出:
A A C
我(天真的)期望“ C C C”的地方
如果确实我在B类中将“新虚拟”替换为“替代”,那是我得到的。
在MSIL中,我得到
.method public hidebysig newslot virtual instance void foo () cil managed
代替
method public hidebysig virtual instance void foo () cil managed
方法上的“新虚拟”是什么?
你能解释我程序的行为吗?