C#新的虚拟方法和原样转换

时间:2019-01-16 09:10:41

标签: c# inheritance

考虑以下几个类和接口:

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 

方法上的“新虚拟”是什么?

你能解释我程序的行为吗?

0 个答案:

没有答案