【发布时间】:2021-07-11 13:35:22
【问题描述】:
我有两节课
class A
{
public virtual void Metod1()
{
Console.WriteLine("A.Method1");
}
}
class B : A
{
public new void Metod1()
{
Console.WriteLine("B.Method1");
}
}
然后我编写一些代码来声明这些类的实例,并调用它们的方法
static void Main(string[] args)
{
A a = new B();
a.Metod1();
B b = new B();
b.Metod1();
Console.ReadKey();
}
我给出了以下结果:
A.Method1
B.Method1
但是当我从 B 类的签名方法 1 中删除关键字 new 并运行 Main 方法时,我得到了相同的结果。 问题:方法签名中的new关键字只是为了更好的可读性吗?
编辑:在某些情况下我们不能没有新的关键字吗?
【问题讨论】:
-
你必须在 B 类中使用 override 或 new 因为否则它会隐藏父元素的方法。默认是新的,所以如果你不放置新的,它不会给你任何错误并且运行良好..
-
旁注:考虑“混淆代码的读者和用户”是“新”在这种情况下的主要用法。在某些情况下,使用它可能会提高可读性(即需要为一些不友好的基类派生类),但在大多数情况下,它只会让基类的方法何时被调用以及何时被派生更难理解。
标签: c# .net inheritance