私は初期値が設定された後は不変であるいくつかのクラスを持っています。 Eric Lippertはこれをwrite-once immutabilityと呼んでいます。不変性とXMLシリアル化
C#でのライトワンス不変性の実装は、通常、コンストラクタを使用して初期値を設定することを意味します。これらの値は読み取り専用フィールドを初期化します。
XmlSerializerまたはDataContractSerializerのいずれかを使用して、このようなクラスをXMLにシリアル化する必要がある場合は、パラメータのないコンストラクタが必要です。
誰もこの問題を回避する方法についての提案はありますか?シリアライゼーションでうまくいく他の形式の不変性はありますか?
EDIT:@Toddが指摘したように、DataContractSerializerにはパラメータのないコンストラクタは必要ありません。 DataContractSerializer documentation on MSDNによると、DataContractSerializerは "ターゲットオブジェクトのコンストラクタを呼び出しません。"
public class Immutable
{
public Immutable(string foo, int bar)
{
this.Foo = foo;
this.Bar = bar;
}
public string Foo { get; private set; }
public int Bar { get; private set; }
}
あなたはシリアライズ/デシリアライゼーションの中にその不変オブジェクトを表すためにダミーのクラスを作成することができます:
私はあなたが混乱していると思っています...あなたが言うのは、ポピーシム不変性です。それは、一度だけ書き込み不能な私のように見えます。 –
編集:... is ** ** not popsicle ... –
あなたは絶対に正しいです、@Martinho。私は "追記不可能"を読むように私の質問を修正しました。 – dthrasher