我正在尝试检查一些多态情况。在我的代码中,类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
的父类成员
为什么系统调用C
类bb
的成员B
的成员bb
。
发生了什么事?
答案 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");
}