C# で実際の読み取り専用リストを定義する

C# の readonly キーワードは、クラスのフィールドが定義時またはコンストラクターでのみ初期化できることを示します。一般的なタイプのデータは期待される効果を達成できますが、オブジェクトまたはリストでは、読み取り専用の効果を達成したい場合、読み取り専用キーワードを 1 つだけ使用することはできません。読み取り専用で List を変更する場合でも、他のクラスの Add メソッドと Remove メソッドを使用して変更できます。しかし、必要な読み取り専用属性は、現在のクラスでこのリストの項目のみを変更し、他のクラスによって変更されたくない場合です!

次の例は、 readonly キーワードで装飾された List であり、そのコンテンツ項目は他のクラスで引き続き追加または削除できます。


読み取り専用プロパティとしてカプセル化されている場合でも、他のクラスで操作できます。


ただし、プロパティの型を IEnumerable<T> に変更すると、目的の効果を得ることができます。IEnumerable<T> クラスには Add メソッドと Remove メソッドがないため、List<T> クラスは IEnumerable<T> クラスを継承し、List<T> クラスに Add メソッドと Remove メソッドが新たに追加されます。


現在のクラスでもアイテムを変更できない完全な読み取り専用プロパティを作成する場合は、 ReadOnlyCollection<T> を使用できます。


.NET 4.5 では、List<T> は IReadOnlyList<T> と IReadOnlyCollection<T> を継承します。これにより、より簡単な記述方法が得られ、上記の効果も実現できます。


ソース: http://sirkevin.cnblogs.com 

おすすめ

転載: blog.csdn.net/weixin_43705303/article/details/104768823