【问题标题】:"new" keyword in C# is just for making the warning disappeared, isn't it?C# 中的“new”关键字只是为了让警告消失,不是吗?
【发布时间】:2012-01-20 02:52:59
【问题描述】:

我无意中看到这个页面new keyword in method signature,我发现这篇文章中给出的一些例子并不准确(例如第二个)

如果您不说“覆盖”,我认为“新”已经存在。唯一的区别是,如果你不写“覆盖”(对于虚拟方法)或“新”,你会得到一条绿线(警告?)。你仍然可以选择不写“新”,它仍然可以工作。我这样说是对的,还是我错过了一些重要的事情?

【问题讨论】:

  • 看看这个来自 Eric Lippert stackoverflow.com/a/3118480/149190的答案
  • 第二个我认为您的意思是这个:stackoverflow.com/a/1014309/112407(并非所有排序顺序都相同)确实准确,并强调了为什么它是一个警告。该代码很可能会做一些其他预期的事情。编译时类型很少比运行时类型更重要,但在这种情况下它是
  • 感谢分享 Eric Lippert 的答案。但我无法将其作为答案,因为它在评论中。非常感谢。

标签: c#


【解决方案1】:

我相信这基本上是为了让您可以在代码中声明意图。

因此,如果您想在基类中隐藏一个方法,您可以使用新指令告诉自己和他人,您是故意这样做的。即,您没有添加一个与现有 onne 同名的全新方法。

【讨论】:

    【解决方案2】:

    是的,除了隐藏该警告之外,它什么也不做。

    警告只是为了确保您知道自己在做什么,因为隐藏很少是一个好主意。但是,如果基类引入了一个新的虚方法,而派生类恰好有一个匹配但独立的方法现在意外地覆盖了继承的方法,那么将 override 设为默认值会导致版本控制问题。

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 2014-05-03
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      相关资源
      最近更新 更多