私は抽象クラスを継承しています。親メソッドではいくつかの条件をチェックし、発生した場合はChildメソッドの実行を停止する必要があります。しかし、return
の後、子供はそのコードを続けています!メソッドは無効にする必要があります。 また、私はthrow new Exception();
を試しましたが、動作しません。継承メソッドを抽象で停止する
public abstract class ParentClass
{
public virtual void Method()
{
if (true)
{
// do something
Console.WriteLine("Parent Method should stop it's child!");
return; /* So the child should be stopped to call it's things*/
// Also checked by throw exception.
}
}
}
そしてChildClass
public class ChildClass :ParentClass
{
public override void Method()
{
base.Method(); // Also checked by try/catch
Console.WriteLine("Should't be run");
}
}
に、どのように私はそうのように行うことができます(親が子プロセスを制御継続するかどうかを)?
オーバーライドは、子供が、彼らがやりたいことを意味します。彼らは 'base.Method()'を呼び出す必要はありません。あなたはおそらく、子供が仕事をする必要があるかどうかを返す保護されたゲッタ/メソッドを公開する必要があります。 – Rob
なぜあなたの子供の方法は呼ばれるべきではないと思いますか?親メソッドを終了するだけで、子メソッドはとにかく呼び出されます。 – ckruczek
'return'文は現在のメソッドからのみ返されます。したがって、' ParentClass'によって宣言されたものからあなたのケースに戻ります。しかしこれは、呼び出し元のメソッド( 'ChildClass.Method()')で実行されているそれ以上の文を停止しません。 – bassfader