2012-09-15 106 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入禁區。