不変型を実装できないシナリオがあるとします。その前提に従えば、消費した後に不変になる型を適切に設計する方法に関する意見や例が欲しいです。消費した後に変更可能なクラスを設計する
public class ObjectAConfig {
private int _valueB;
private string _valueA;
internal bool Consumed { get; set; }
public int ValueB {
get { return _valueB; }
set
{
if (Consumed) throw new InvalidOperationException();
_valueB = value;
}
}
public string ValueA {
get { return _valueA; }
set
{
if (Consumed) throw new InvalidOperationException();
_valueA = value;
}
}
}
ObjectA
がObjectAConfig
消費:言ったよう
public ObjectA {
public ObjectA(ObjectAConfig config) {
_config = config;
_config.Consumed = true;
}
}
が、私は、これは単純に動作することを満足していないが、私はによってObjectAConfig
は不変作り、より良いパターン(除外ありますかどうかを知りたいのですがデザインは開始から)。例えば
:
は意味が包まれた値が一度だけ初期化することを可能にする
Once<T>
のようなモナドを定義することができますか?プライベートフィールドを変更する型自体を返す型を定義する意味がありますか?
*なぜ*あなたは不変型を実装できませんか?あなたが解決しようとしている実際の問題を説明したなら、それは助けになりました。 –
[この質問](http://stackoverflow.com/questions/4168382)には、同様のことを行う面白いパターンがいくつかあります。 –