.NETのコードコントラクトについて学び、純粋なコンストラクターの概念を理解しようとしています。コードの契約ドキュメントの状態:
コントラクト内で呼び出されるすべてのメソッドは純粋でなければなりません。つまり、既存の状態を更新してはなりません。純粋メソッドでは、純粋メソッドへのエントリ後に作成されたオブジェクトを変更できます。
そして、PureAttribute
ドキュメントの状態:
型またはメソッドが純粋であること、つまり、目に見える状態の変更を行わないことを示します。
メソッドに関してはこれらのステートメントを理解していますが、コンストラクターはどうですか?次のようなクラスがあったとします:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
このコンストラクターは明らかに新しいFoo
オブジェクトの状態に影響しますが、他の副作用はありません(たとえば、パラメーターを操作したり、非純粋なメソッドを呼び出したりしません)。これは候補者[Pure]
ですか?[Pure]
コンストラクターに属性を配置することの意義は何ですか?また、自分のコードでこれをいつ行う必要がありますか?