public abstract class A
{
public abstract void Process();
}
public abstract class B : A
{
public abstract override void Process();
}
public class C : B
{
public override void Process()
{
Console.WriteLine("abc");
}
}
此代码抛出编译错误:'B'未实现继承的抽象成员'A.Process()'。
有没有办法做到这一点?
答案 0 :(得分:13)
在B类中完全省略该方法.B无论如何都从A继承它,并且因为B本身是抽象的,所以你不需要再次实现它。
答案 1 :(得分:8)
在VS2008中为我工作;没有错误,没有警告。但是,没有理由在B中使用'覆盖'。这段代码是等价的:
public abstract class A
{
public abstract void Process();
}
public abstract class B : A
{
}
public class C : B
{
public override void Process()
{
Console.WriteLine("abc");
}
}
答案 2 :(得分:3)
Alon -
这没有任何意义。首先,这确实编译得很好。其次,您在A中声明的抽象方法被继承(仍然是抽象)为B.因此,您无需在B类中声明Process()。
- 标记
答案 3 :(得分:3)
我看到这个地方的地方有时会用抽象方法覆盖非抽象虚拟方法。例如:
public abstract class SomeBaseType
{
/* Override the ToString method inherited from Object with an abstract
* method. Non-abstract types derived from SomeBaseType will have to provide
* their own implementation of ToString() to override Object.ToString().
*/
public abstract override string ToString();
}
public class SomeType : SomeBaseType
{
public override string ToString()
{
return "This type *must* implement an override of ToString()";
}
}