0

この2つの方法を検討してください

public int GetSomething(object obj)
{
    Contract.Requires<ArgumentNullException>(obj != null);

    ...
}

public int GetSomethingWrapper(object anotherObj)
{
    var obj = GetObj(anotherObj);
    return GetSomething(obj);
}

安全であると考えてみましょうGetObj。つまり、例外はスローされません。
したがって、 obj が null の場合は execptionGetSomethingをスローします。GetSomethingWrapperしかし後者の場合、例外の発生源はGetSomethingメソッドです。

問題は、チェックを追加するかどうかGetSomethingWrapperです。
一方の側:気にするビジネスではありません。一方、両方のメソッドは公開されていますが、ラッパー メソッドの呼び出し元にはコントラクト情報がありません。

4

1 に答える 1

3

一方の側:気にするビジネスではありません。

はい、そうです-コントラクトを使用してメソッドを呼び出しているため、そのコントラクトに従う必要があります。その契約に従う最も簡単な方法は、独自の契約を課すことです。

GetSomethingWrapper次に、あなたが言うように、現在コントラクトがないという追加の問題があるため、null 引数で呼び出すことは正当なはずですが、実際にはそうではありません。

基本的には、はい - 私も契約を追加しGetSomethingWrapperます。それが呼び出す実装の詳細GetSomethingは、パブリック コントラクトに影響を与えるべきではありません。

于 2013-04-12T10:20:57.217 に答える