关于多态性的小问题

时间:2018-06-22 12:29:33

标签: c# oop

我正在尝试检查一些多态情况。在我的代码中,类B具有bb个虚拟方法,而类C也具有相同的bb方法,但这是正常的。

public class Program
{
    private static void Main(string[] args)
    {
        C ccc = new C();
        ccc.aa();
        ccc.bb();
        ccc.cc();
        Console.ReadLine();
    }
}
public class A
{
    public virtual void aa() => Console.WriteLine("a");
}
public class B : A
{
    public virtual void bb() => Console.WriteLine("b");
}
public class C : B
{
    public virtual void cc() => Console.WriteLine("c");
    public void bb() => Console.WriteLine("bvv");
}

运行代码时,输​​出为

a
bvv
c

但是我还没有覆盖类B方法bb的父类成员 为什么系统调用Cbb的成员B的成员bb

发生了什么事?

1 个答案:

答案 0 :(得分:0)

遵循MSDN C# https://docs.microsoft.com/fr-fr/dotnet/csharp/language-reference/keywords/new-modifier

  

通过继承隐藏名称的方式有以下一种:

     

在类或结构中引入的方法隐藏属性,字段和   在基类中共享该名称的类型。它也隐藏了所有基地   具有相同签名的类方法。

因此,默认情况下,您可以在C类或C类覆盖B上使用new关键字

class C : B
{
    public virtual void cc() => Console.WriteLine("c");
    public new void bb() => Console.WriteLine("bvv");
}