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