ReadOnlyCollectionクラスの仕様を見ると、 IListインターフェイスが実装されています。
IList インターフェイスには Add/Update/Read メソッドがあり、これをインターフェイスの事前条件と呼びます。IList があれば、アプリケーションのどこでも、この種の操作をすべて実行できるはずです。
しかし、コードのどこかで ReadOnlyCollection を返し、.Add(...) メソッドを呼び出そうとしたらどうなるでしょうか。NotSupportedException をスローします。これは悪いデザインの良い例だと思いますか? さらに、このクラスはLiskov Substitution Principleを破っていますか?
Microsoft がこのように実装したのはなぜですか? この ReadOnlyCollection が IEnumerable インターフェイスのみを実装するようにする方が簡単 (かつより良い) でしょうか (ちなみに、これは既に読み取り専用です)。