Стоит отметить, что вам не нужно реализовывать весь интерфейс неявно или явно - это решение от участника к члену ... и у меня есть разные причины для разных участников.Я только предполагаю (очень немногие могут дать здесь точный ответ), но:
Count
: я подозреваю , что свойство Length
имеет особую поддержку, когда выимеет дело с конкретным типом массива (я не проверял IL) и более эффективен;чище не представлять обоим разработчикам IsFixedSize
: если вы знаете, что имеете дело с массивом, вы знаете, что размер фиксирован IsReadOnly
: если вы знаете, что 'вы имеете дело с массивом, вы знаете, что он изменчивый IsSynchronized
: если вы знаете, что имеете дело с массивом, вы знаете, что он не синхронизирован Item
: неуниверсальныйIList
интерфейс будет выставлять индексаторы, которые принимают / возвращают object
;определенные типы индексаторов массива более безопасны по типу (и опять же, вероятно, поддерживаются более напрямую).Методы доступа в Array
предоставляют опции для массивов с рангом! = 1. SyncRoot
: для массива никогда не бывает SyncRoot
Add
, Insert
, Remove
, RemoveAt
, Clear
: Вы никогда не сможете изменить размер массива, поэтому ни один из них не подходит
Другими словами, если у вас уже есть информация времени компиляции, котораяэто массив, вы уже знаете ответ или определенно не можете использовать эти операции - или есть лучший способ сделать это.
Те, которые могут быть разумными:
Contains
, CopyTo
, IndexOf
: Все они могут быть представлены через неявную реализацию интерфейса.Я не знаю, почему они не
GetEnumerator
(из IEnumerable
) уже выставлены через неявную реализацию интерфейса.