【问题标题】:Overriding without "override"/"new" not causing an error没有“覆盖”/“新”的覆盖不会导致错误
【发布时间】:2012-09-16 05:41:57
【问题描述】:

我刚刚读到,当您在派生类中定义与基类中描述的方法同名的方法时,您应该收到错误:“请添加'覆盖'或'新的'关键字”。但是尽管我试图通过下面的代码让它这样做,但一切似乎都很好。

我想知道为什么?我使用 Visual Studio 2010。

class Base
{
  public void Method()
  {
    Console.WriteLine("Base class");
  }
}

class Child : Base
{
  public void Method()
  {
    Console.WriteLine("Child class");
  }
}

static void Main(string[] args)
{
  Base myBase = new Base();
  Child myChild = new Child();
  myBase.Method();
  myChild.Method();
}

我得到的输出如下。

基类

儿童班

【问题讨论】:

    标签: c#


    【解决方案1】:

    您不会收到错误消息,而是会收到编译时警告。

    Here is the MSDN documentation that explains it all.

    【讨论】:

    • 谢谢,所以,据我所知,“new”关键字总是可选的?
    • @AlekseiChepovoi,好吧,这不是可选的,因为有一个警告......警告应该永远被忽略;它们应该被修复或抑制(如果您知道警告不适用于您的情况)。在这种情况下,修复很容易......
    【解决方案2】:

    它们只是碰巧具有相同名称的两种不同方法。在编译时绑定哪种方法取决于编译器在任何给定上下文中看到的类型。

    请注意,如果这是编译时或运行时错误,则库开发人员只需向共享基类添加新方法即可中断使用代码。

    【讨论】:

      【解决方案3】:

      这不是错误,而是警告。

      参见 CS0108:http://msdn.microsoft.com/en-us/library/3s8070fc.aspx

      如果您想将其视为错误,您可以转到项目的属性,构建选项卡,将警告视为错误,并在将 108 放入框中时检查特定警告。

      【讨论】:

        猜你喜欢
        • 2018-07-21
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 1970-01-01
        • 2016-09-09
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        相关资源
        最近更新 更多