我有几个继承自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。
有什么建议吗?
答案 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()
{
}