読み取り専用にしたいコレクションプロパティを持つインターフェイスを作成しています。インターフェイスのユーザーがコレクションを変更できるようにしたくありません。読み取り専用コレクションプロパティを作成するために私が見つけた典型的な提案は、プロパティのタイプを次のようにIEnumerableに設定することです。
private List<string> _mylist;
public IEnumerable<string> MyList
{
get
{
return this._mylist;
}
}
ただし、これは、ユーザーがIEnumerableをリストにキャストして変更することを妨げるものではありません。
Yield
直接返す代わりにキーワードを使用する_mylist
と、インターフェイスのユーザーがコレクションを変更できなくなります。実際のコレクションではなく、オブジェクトを1つずつ返すだけなので、そう思います。
private List<string> _mylist;
public IEnumerable<string> MyList
{
get
{
foreach(string str in this._mylist)
{
yield return str;
}
}
}