gpt4 book ai didi

c# - 在方法签名中使用 new 关键字通常只是为了提高可读性吗?

转载 作者:太空狗 更新时间:2023-10-29 20:53:14 24 4
gpt4 key购买 nike

我已经阅读了new 关键字in method signature 并在this 上看到了下面的示例发布,但我仍然不明白为什么要写 new 关键字 in method signature。如果我们省略它,它仍然会做同样的事情。它会编译。会有一个警告,但它会编译。

所以,在方法签名中写new只是为了可读性?

public class A
{
public virtual void One() { /* ... */ }
public void Two() { /* ... */ }
}

public class B : A
{
public override void One() { /* ... */ }
public new void Two() { /* ... */ }
}

B b = new B();
A a = b as A;

a.One(); // Calls implementation in B
a.Two(); // Calls implementation in A
b.One(); // Calls implementation in B
b.Two(); // Calls implementation in B

最佳答案

隐含在这个问题中:为什么隐藏基类成员时不需要 new 关键字?原因是脆弱的基类问题。假设你有一个图书馆:

public class Base
{
public void M() { }
}

并且您已经在自己的代码库中派生了一个类:

public class Derived : Base
{
public void N() { }
}

现在,库作者发布了一个新版本,在 Base 中添加了另一个方法:

public class Base
{
public void M() { }
public void N() { }
}

如果方法隐藏需要 new 关键字,您的代码现在无法编译!将 new 关键字设为可选意味着您现在只需要担心一个新的警告。

编辑

正如 Eric Lippert 在他的评论中指出的那样,“需要担心的新警告”大大低估了警告的目的,即“挥舞一面大红旗”。我写的时候一定很匆忙;当人们反射性地将警告视为可以容忍的烦恼而不是将它们视为有用的信息时,这很烦人。

编辑 2

我终于找到了这个答案的来源,当然,这是 Eric 的帖子之一:https://stackoverflow.com/a/8231523/385844

关于c# - 在方法签名中使用 new 关键字通常只是为了提高可读性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9201344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com