次のシナリオがあります。
public interface ISomething
{
void DoStuff();
//...
}
public class Something : ISomething
{
private readonly ISomethingElse _somethingElse;
//...
public Something (ISomethingElse somethingElse)
{
Contract.Requires(somethingElse != null);
_somethingElse = somethingElse;
}
public void DoStuff()
{
// *1* Please look at explanation / question below
_somethingElse.DoThings();
}
}
1行目で静的チェッカーをオンにすると、それが null である可能性があるという警告が表示されます。_somethingElse
コントラクトを追加すると、エラーが発生します。
[Type] インターフェイス メソッド {Interface.Method} を実装しているため、require を追加できません
ここで何をするのが最善ですか?私が見るオプションは次のとおりです
- 少し極端に見えますが、ガード条項
- a
Contract.Assume
- 私が考えもしなかった隠された第3の選択肢
readonly
このフィールドは、コンストラクターで値を設定した後は変更できないことに注意してください。したがって、コード コントラクトからの警告は少し無関係に思えます。