2014-02-25 252 views
2

我有幾個從BaseClass繼承而來的類,它有一個名爲GetData的抽象方法。在其中的一箇中,我想基本繼承並提供一個名爲GetArticles的新方法,我從GetData調用。這是代碼。從非抽象類繼承

public abstract class BaseClass 
{ 
    internal abstract void GetData(); 
} 

internal class FirstClass : BaseClass 
{ 
    internal override void GetData() 
    { 
     // calls GetArticles 
    } 

    protected void GetArticles() 
    { 
    } 
} 

internal class SecondClass : FirstClass 
{ 
    protected new void GetArticles() 
    { 
    } 
} 

GetArticles永遠不會在SecondClass中調用。它調用FirstClass中的一個,即使我的對象是SecondClass類型。我無法在FirstClass Abstract中創建GetArticles,因爲我想單獨使用FirstClass。

有什麼建議嗎?

+0

'new'不會覆蓋方法。 –

回答

7

在您的FirstClass中聲明GetArticles爲虛擬。在第二類中刪除new並添加override

+0

謝謝,這是訣竅 –

6

使GetArticles虛擬。

protected virtual void GetArticles() 
{ 
} 
7

你的方法來標記爲FirstClassvirtualSecondClass使用override關鍵字覆蓋。

internal class FirstClass : BaseClass 
{ 
    internal override void GetData() 
    { 
     // calls GetArticles 
    } 

    protected virtual void GetArticles() 
    { 
    } 
} 

internal class SecondClass : FirstClass 
{ 
    protected override void GetArticles() 
    { 
    } 
} 

new修飾符隱藏底層虛擬方法,這不是你想要的。在MSDN上檢查Knowing When to Use Override and New Keywords (C# Programming Guide)