【发布时间】:2012-07-09 18:01:07
【问题描述】:
我有一个抽象类A,只有一个抽象方法。
这个类被另一个类B继承,它不应该实现抽象方法。
现在另一个类C需要继承类B并实现类A中定义的方法。
我该怎么做?
【问题讨论】:
标签: c# oop inheritance
我有一个抽象类A,只有一个抽象方法。
这个类被另一个类B继承,它不应该实现抽象方法。
现在另一个类C需要继承类B并实现类A中定义的方法。
我该怎么做?
【问题讨论】:
标签: c# oop inheritance
如果类B 不打算实现其基类的所有抽象成员,您还需要将其标记为抽象类。然后,在 C 类中照常覆盖。
例子:
public abstract class A
{
public abstract void DoStuff();
}
public abstract class B : A
{
// Empty
}
public class C : B
{
public override void DoStuff()
{
Console.WriteLine("hi");
}
}
【讨论】:
A 声明了 virtual 或 abstract 方法,则层次结构中较低的任何类(B、C 或派生自 A 的任何其他类)都可以覆盖它。
C 类中覆盖A 类的抽象和虚方法。如果要覆盖非抽象/非虚拟方法,可以使用 new 关键字来实现。问题是 B 类。您要么必须将其标记为抽象,要么实现A 的抽象成员。如果你不这样做,B 类将违反接口契约; B 类的实例不会与 A 类表现出“is-a”关系。