2

让我们看看下面的类结构:

abstract class Base {

    public abstract void DoSth();
}

class Derived1 : Base {

    public override void DoSth() {

    }
}

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

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

4

2 回答 2

6

C# 允许“重新抽象”该方法。一个人可以写:

abstract class Derived2 : Derived1 {

    public abstract override void DoSth();
}

从现在开始,它再次变成抽象,如果它不提供自己的实现,DoSth编译器将拒绝编译派生的类。Derived2DoSth

于 2013-10-16T13:05:14.807 回答
-2

我能想到的最好方法是:

class Derived1 : Base
{

   public override void DoSth()
   {

   }
}

abstract class Derived2 : Derived1
{
   public virtual new void DoSth()
   {

   }

}
于 2013-10-16T13:11:07.833 回答