呼び出し元のコードがコレクションを反復処理するだけの場合、内部コレクションを IEnumerable ではなく ReadOnlyCollection として公開する理由はありますか?
class Bar
{
private ICollection<Foo> foos;
// Which one is to be preferred?
public IEnumerable<Foo> Foos { ... }
public ReadOnlyCollection<Foo> Foos { ... }
}
// Calling code:
foreach (var f in bar.Foos)
DoSomething(f);
ご覧のとおり、IEnumerable は ReadOnlyCollection のインターフェイスのサブセットであり、ユーザーがコレクションを変更することはできません。したがって、IEnumberable インターフェイスで十分な場合は、それを使用します。それはそれについて推論する適切な方法ですか、それとも何かが欠けていますか?
ありがとう/エリック