2012-09-15 75 views
2

我刚才读到,当你在一个派生类中定义一个方法,它与基类中描述的方法具有相同的名称时,你应该得到错误:“请添加'覆盖'或'新'关键字”。但是,尽管我试图通过下面的代码来让它这样做,但一切似乎都没有问题。覆盖没有“覆盖”/“新”不会导致错误

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

我得到的输出如下。

Base class

Child class

回答

1

您不会收到错误,您将收到编译时警告。

Here is the MSDN documentation that explains it all.

+0

谢谢你,所以,据我了解,“新”关键字总是可选的? –

+0

@AleseseChepovoi,好吧,它不是真正的可选项,因为有警告......警告应该永远不会被忽略;他们应该是固定的或者被压制的(如果你知道警告不适用于你的情况)。在这种情况下,修复很容易... –

1

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

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

1

这是不是一个错误,这是一个警告。

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

如果你想要把它当作一个错误,你可以去你的项目的属性,建立标签,警告视为错误,并检查特定的警告,而把108入禁区。