7

void Action()派生クラスでオーバーライドされる仮想基本メソッドがあります。

Action の最初のステップは、 を呼び出すことbase.Action()です。基本メソッドで状況が発生した場合、残りの派生メソッドを処理したくありません。

基本メソッドから派生メソッドを終了できるキーワードまたはデザイン パターンがあるかどうかを知りたいです。

現在、void を bool に変更し、それをフロー コントロールとして使用することを検討していますが、使用できる可能性のある他のデザイン パターンがあるかどうか疑問に思っていました。

4

3 に答える 3

5

これはエラーの「状況」ですか?その場合は、例外をスローするようにし、オーバーライド内で例外をキャッチしないでください。

エラー状況ではない場合、戻り値の型を使用することは前進の方法のように思えますが、それはあなたのコンテキストには適していない可能性があります.あなたが何を達成しようとしているのか私たちは本当に知りません.

もう 1 つのオプションは、テンプレート メソッド patternを使用することです。

public abstract class FooBase
{
    public void DoSomething()
    {
        DoUnconditionalActions();
        if (someCondition)
        {
            DoConditionalAction();
        }
    }

    protected abstract void DoConditionalAction();
}

基本クラスを抽象化したくない場合は、基本クラスでは何もせず、必要に応じて派生クラスでオーバーライドされる保護された仮想メソッドにすることができます。ここでは仮想でDoSomethingないことに注意してください。

これらのオプションのいずれも適切でないと思われる場合は、何を達成しようとしているのかについて、より具体的な情報を提供する必要があります。

于 2012-05-28T09:06:46.870 に答える
3

void返された型で使用しないでください 。bool

public class Base
{
    public virtual bool Action()
    {
       ..
       return boolean-value.
    }
}

public class Child : Base
{
    public override bool Action()
    {
       if(!base.Action()) 
         return false;

       ....
       return boolean-value;
    }
}

または、これが例外的な状況である場合は、他の人が示唆するように例外を発生させます。

于 2012-05-28T09:10:01.003 に答える
0

基本メソッドで例外をスローします。キャッチされるまで、それを呼び出した各メソッドを終了します。

于 2012-05-28T09:07:40.500 に答える