相关疑难解决方法(0)

关于虚拟/新/覆盖的困惑

我对virtual/ 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 ... ???
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在第二次通话中我们得到了A::mVVirtual.我通常用这个"算法"处理这些问题:

  1. 对于一个名为的实例方法,检查保存对象引用的变量的类型mVVirtual?没有一个......但确实有一个带有该签名和名称的虚拟方法!
  2. 虚方法?然后让我们检查 …

c# virtual overriding keyword new-operator

8
推荐指数
3
解决办法
1695
查看次数

标签 统计

c# ×1

keyword ×1

new-operator ×1

overriding ×1

virtual ×1