覆盖没有“覆盖”/“新”没有导致错误

时间:2012-09-15 20:57:27

标签: c#

我刚才读到,当你在派生类中定义一个与基类中描述的方法同名的方法时,你应该得到错误:“请添加'override'或'新的'关键字“。但是,尽管我试图通过下面的代码来实现这一点,但一切似乎都没问题。

我想知道为什么?我使用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();
}

我得到的输出如下。

  

基础课程

     

儿童班

3 个答案:

答案 0 :(得分:1)

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

请注意,如果这是编译时错误或运行时错误,那么库开发人员可以通过向共享基类添加新方法来破坏消费代码。

答案 1 :(得分:1)

您没有收到错误,您会收到编译时警告。

Here is the MSDN documentation that explains it all.

答案 2 :(得分:1)

这不是错误,而是警告。

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

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