让我们看一下下面的类结构:
abstract class Base {
public abstract void DoSth();
}
class Derived1 : Base {
public override void DoSth() {
}
}
这些是某些层次结构的基类。现在,假设我们要提供另一个源自
Derived1
的类(我们称它为Derived2
),该类不应使用DoSth
提供的Default1
的默认实现。例如,Derived1覆盖了98%的案例,但在其余2%的案例中,此解决方案是不可接受的或危险的。最好的解决方案是通知从
Derived2
派生的某人,他应该在编译期间实现DoSth。怎么做? 最佳答案
C#允许“重新抽象”该方法。一个人可以这样写:
abstract class Derived2 : Derived1 {
public abstract override void DoSth();
}
从现在开始,
DoSth
再次成为抽象,如果编译器不提供自己的Derived2
实现,编译器将拒绝编译从DoSth
派生的类。