从非抽象类继承

Rob*_*ick 2 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()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

在SecondClass中永远不会调用GetArticles.它调用FirstClass中的那个,即使我的对象是SecondClass类型.我无法在FirstClass Abstract中创建GetArticles,因为我想自己使用FirstClass.

有什么建议?

LB2*_*LB2 7

GetArticles在你的FirstClass虚拟中声明.在第二个类中删除new并添加override


Mar*_*zek 7

您的方法必须标记为virtualin 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()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

new修饰符隐藏了底层虚拟方法,这不是您想要的.在MSDN上检查知道何时使用覆盖和新关键字(C#编程指南).


Til*_*lak 6

GetArticles虚拟的.

protected virtual void GetArticles()
{
}
Run Code Online (Sandbox Code Playgroud)