考虑以下因素 -
void Main()
{
var c = new C();
c.Print();
}
public abstract class A
{
public virtual void Print()
{
Console.WriteLine("I'm in A!");
}
}
public abstract class B : A
{
public abstract override void Print();
}
public class C : B
{
public override void Print()
{
Console.WriteLine("I'm in C!");
base.Print();
}
}
这当然不会编译,因为它认为我正在尝试调用 B 的 print 方法,这是抽象的。我想做的是调用 C 的 print 方法,然后让它调用基础的 print 方法,这将“链接”回 A 的 print 方法。我希望输出是 -
I'm in C!
I'm in A!
这样做可能吗?我做错了什么?
编辑:我想补充一点,上面代码的要点是我试图强制任何扩展 B 的人实现自己的 Print 方法。
最佳答案
嗯,你可以这样做
public abstract class A
{
public virtual void Print()
{
Console.WriteLine("I'm in A!");
}
}
public abstract class B : A
{
public override void Print()
{
base.Print();
}
}
public class C : B
{
public override void Print()
{
Console.WriteLine("I'm in C!");
base.Print();
}
}
这是有效的
public abstract class A
{
public virtual void Print()
{
Console.WriteLine("I'm in A!");
}
}
public abstract class B : A
{
}
public class C : B
{
public override void Print()
{
Console.WriteLine("I'm in C!");
base.Print();
}
}
关于c# - 使用抽象重写并调用基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19173101/