float [] наследует только IList, а не IArray, и AFAIK, изменить это невозможно.
Массив T также реализует IList<T>
и другие (но они не всегда отображаются в инструментах, некоторые аспекты массива как особые, учитываемые средой выполнения).
Я бы хотел отказаться от IArray и использовать только IList, но мои классы должны были бы реализовать много методов [...]
Это правда, но такая реализация выполняется довольно быстро (и если вам нужны только немодифицирующие операции, вы можете просто выбросить NotImplementedException
из модифицирующих методов).
На практике это занимает всего несколько минут, и ваша реализация должна быть многоразовой. Также есть такие типы, как ReadOnlyCollection<T>
, чтобы помочь избежать этой работы.
И тогда мой вопрос: как float [] может реализовать IList, тогда как у него нет этих методов?
Тип может явно реализовывать методы интерфейса. Они не являются непосредственно членами типа, но приведение к интерфейсу (или отражение) позволит получить доступ. Это позволяет типизированной коллекции реализовать IEnumerator.Current
(возвращая Object
), а также предоставляет свойство Current
, которое возвращает правильный тип.