2

私は3つのクラスを持っています。A というインターフェイスと、A を実装する B および C。また、B には C のインスタンスがあります。A のメソッドを null にすることはできません。ただし、C は時々 null を返すことがあります。クラス B は C インスタンスのメソッドをチェックし、C の戻り値が null の場合は、自己値 (B からの値) を返します。

public abstract class A
{
bool abstract method1();
bool abstract method2();
}

public class B:A
{
public C c;
override bool method1()
{
//if c.method1 is not null return c.method1() otherwise do some other functionality
}
}

public class C:A
{
?
}

パフォーマンス上の問題があるため、例外をスローしたくありません。オーバーライド クラスの型を nullable に変更できないため、C クラスを実装するにはどうすればよいですか?

4

4 に答える 4

1

他のコメンターに同意するだけです。このインターフェースを実装するクラスから期待できる結果を定義するインターフェースを定義しました。つまり、新しい要件を満たすようにインターフェイスを調整するか、クラス C がインターフェイス定義に違反する必要がある場合は例外をスローします (null は def -> 違反内にありません)。

例外が実際にスローされるまで、私が知っている限り、例外にはパフォーマンスのペナルティはありません。そのため、場合によっては例外を処理する方がよいのか、すべての場合に null 値をチェックする方がよいのかは推測できません。

于 2013-07-16T21:03:34.387 に答える
1

C実装せずA、同じデータを取得して返すメソッドを含むだけにするのが最善かもしれませんbool?Bによって提示された契約をまだ満たすことができるようAです。

それがオプションでない場合は、例外をスローして でキャッチしBます。

于 2013-07-16T21:06:33.590 に答える