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再び抽象化され、コンパイラはDerived2の独自の実装を提供しない場合、から派生したクラスのコンパイルを拒否しますDoSth

于 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 に答える