почему класс Array явно реализует интерфейс Ilist, а не неявно? - PullRequest
4 голосов
/ 02 февраля 2012

Мой целевой язык - C # с .net framework. Я хочу знать, в чем смысл или причина этой темы?

любые советы и предложения будут высоко оценены.

EDIT

почему я задал этот вопрос? потому что сейчас некоторые полезные члены класса Array, такие как индекс, хоронят за гипсом !!! Мне интересно было бы лучше, если бы Microsoft разбил интерфейс ilist?

1 Ответ

6 голосов
/ 02 февраля 2012

Стоит отметить, что вам не нужно реализовывать весь интерфейс неявно или явно - это решение от участника к члену ... и у меня есть разные причины для разных участников.Я только предполагаю (очень немногие могут дать здесь точный ответ), но:

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

Другими словами, если у вас уже есть информация времени компиляции, котораяэто массив, вы уже знаете ответ или определенно не можете использовать эти операции - или есть лучший способ сделать это.

Те, которые могут быть разумными:

  • Contains, CopyTo, IndexOf: Все они могут быть представлены через неявную реализацию интерфейса.Я не знаю, почему они не

GetEnumerator (из IEnumerable) уже выставлены через неявную реализацию интерфейса.

...