我有几个继承自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.
有什么建议?
您的方法必须标记为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#编程指南).