从非抽象类继承

时间:2014-02-25 16:59:06

标签: c# inheritance

我有几个继承自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()
    {
    }
}

从不在SecondClass中调用GetArticles。它调用FirstClass中的那个,即使我的对象是SecondClass类型。我不能在FirstClass Abstract中创建GetArticles,因为我想自己使用FirstClass。

有什么建议吗?

3 个答案:

答案 0 :(得分:7)

GetArticles中的FirstClass声明为虚拟。在第二课中,删除new并添加override

答案 1 :(得分:7)

您的方法必须在virtual中标记为FirstClass,并使用override中的SecondClass关键字覆盖。

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)

答案 2 :(得分:6)

GetArticles虚拟。

protected virtual void GetArticles()
{
}