Array.IsReadOnly niespójny w zależności od implementacji interfejsu

Tablica wpisana implementuje obaSystem.Collections.IList iSystem.Collections.Generic.ICollection<T> interfejsy, które mają swoje własneIsReadOnly nieruchomości. Ale co tu się dzieje?

var array = new int[10];
Console.WriteLine(array.IsReadOnly); // prints "False"

var list = (System.Collections.IList)array;
Console.WriteLine(list.IsReadOnly); // prints "False"

var collection = (System.Collections.Generic.ICollection<int>)array;
Console.WriteLine(collection.IsReadOnly); // prints "True"

TheIList widok tablicy zachowuje się tak, jak oczekiwałem, zwracając to samo, co sama tablica, jednakICollection<T> widok tablicy zwraca wartość true.

Czy istnieje jakieś racjonalne wyjaśnienie tego zachowania, czy jest to błąd kompilatora / CLR? (Byłbym naprawdę zdziwiony, gdyby to ten drugi, jak można sobie wyobrazić, zostałby znaleziony już wcześniej, ale jest tak sprzeczny z intuicją, że nie mogę myśleć, jakie może być wyjaśnienie ...).

Używam C # 3.0 / .NET 3.5 SP1.

questionAnswers(4)

yourAnswerToTheQuestion