2014-02-25 210 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)