2009-07-23 17 views
0

私は不変構造体を.NETで作成しています。この構造体には、異なる不変構造体の読み取り専用コレクションが含まれています(設計全体を完全に制御できます)。私は非変異型のAddメソッドは必要ありません。コレクションで不変構造体

これを行うにはどうすればよいですか?

内部構造体を含むReadOnlyCollectionへの参照を外部構造体に作成させることができます。他のオプションはありますか?

答えて

3

ReadOnlyCollectionは片道です。

コレクションの処理内容によっては、代わりにIEnumerableというように公開することもできます。

+1

+1単純な配列を使用できますが、配列は変更可能です。 'Array'クラスは配列を読み込み専用コレクションに変換する' AsReadOnly'という静的メソッドを持っています。 'ReadOnlyCollection'を返します。それとは異なる理由はありません。 – jpbochi

+0

@jpbochi:何をしているのかによって、配列を使用する方が良いかもしれませんが、完全な記入がなされるまで、どのフィールドにも参照を格納しないでください。配列を変更したり、それを変更する代わりに、構造体のメソッドまたはプロパティを介して配列内容へのアクセスのみを許可します。このアプローチは、ReadOnlyCollectionラッパーを使用するよりもオーバーヘッドが少なくなりますが、クラスのユーザーに、構造体を経由せずに配列にアクセスするために使用できるものを提供できないという欠点があります。 3番目のアプローチ... – supercat

+0

...構造体に最初に配列に代入される 'IList'を保持することがありますが、要求された場合は' ReadOnlyCollection'で置き換えることができます。これは、多くの場合、コレクション参照が同じ 'ReadOnlyCollection'インスタンスで満たされるように繰り返される要求を許可しますが、読み取り専用の構造体インスタンスに' ReadOnlyCollection'が要求された場合、参照をキャッシュすることができない。 – supercat