重新抽象重写方法

时间:2013-10-16 13:05:15

标签: c# methods virtual abstract class-hierarchy

让我们看看以下类结构:

abstract class Base {

    public abstract void DoSth();
}

class Derived1 : Base {

    public override void DoSth() {

    }
}

这些是某些层次结构的基类。现在,让我们假设,我们想要提供另一个派生自Derived1的类(我们称之为Derived2),该类不应使用DoSth提供的Default1的默认实现。 。例如,Derived1涵盖了98%的案例,但在剩下的2%中,此解决方案是不可接受的或危险的。

最好的解决方案是通知从Derived2派生的人,他应该在编译期间实现DoSth。怎么做?

2 个答案:

答案 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()
   {

   }

}