Почему.NET не имеет двунаправленного перечислителя?

Переменная только для чтения очень похожа на const в том смысле, что значение является постоянным на протяжении всего срока службы. Разница в том, что переменная только для чтения инициализируется во время выполнения, а const - во время компиляции. Статический , в смысле терминов непрофессионалов, означает, что экземпляр переменной не зависит от экземпляра объекта, в котором она объявлена. Время ее существования сохраняется от вызова функции до вызова функции. Статическая переменная быстрее доступна, потому что ее хранилище остается выделенным на весь период действия программы. Итак, зная это, мы можем вернуться к вашему вопросу.

Почему «логгер» является статическим членом? Это дизайнерское решение. Мне нужно знать, как вы используете это, чтобы ответить на этот вопрос. Почему это только для чтения? Потому что кажется, что он инициализирован один раз, а его экземпляр используется повсеместно. Мы можем быть уверены, что никто больше не повлияет на значение logger, сделав его доступным только для чтения сразу после его инициализации.

10
задан Community 23 May 2017 в 12:22
поделиться

5 ответов

  • IEnumerator поддерживает инструкцию C # foreach, а также циклические конструкции других языков.
  • IBidirectionalEnumerator не поддерживает инструкции или общепринятые программные идиомы.
3
ответ дан 3 December 2019 в 23:50
поделиться

Кроме того, какова была бы мотивация для этого? Поддержка языка для «обратной» итерации?

Шаблон итератора не придает большого значения концепции «направленности» набора элементов. Это простой шаблон для предоставления простого интерфейса для итерации по набору.

1
ответ дан 3 December 2019 в 23:50
поделиться

Потому что либо об этом никто не подумал, либо никто не подумал, что это будет особенно полезно, либо из-за нехватки бюджета, либо ...

В этом нет необходимости, не так ли? Вы легко можете реализовать это самостоятельно. Возможно, команда BCL думала, что это не стоит мучений по внедрению, тестированию, документированию и т. Д. Никогда не недооценивайте стоимость функции, это может показаться «простым», но это действительно дорого.

В частности, потому что единый интерфейс, который никому не нужен. орудия показались бы странными, правда? Вы ожидаете, что List, Array и т. Д. Будут реализовывать интерфейс, что в конечном итоге требует довольно много работы.

2
ответ дан 3 December 2019 в 23:50
поделиться

Очевидно, существует множество типов коллекций, которые не могут реализовать это, поскольку MoveNext () является деструктивным или изменяет состояние базовой коллекции.

MoveNext ( ) является неразрушающим. Фактически, если состояние базовой коллекции изменяется между временем создания IEnumerator и временем вызова MoveNext () , вызов MoveNext () завершится ошибкой.

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

2
ответ дан 3 December 2019 в 23:50
поделиться

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

Это дизайнерское решение. Реализация обоих будет дорогостоящей и сделает фреймворк более раздутым, и вам нужно будет поддерживать оба при добавлении функций. Вам нужно будет сохранить обратную совместимость в будущем. Нехорошо добавлять к BCL все, что только можно придумать, не убедившись, что это дает значительные преимущества.

4
ответ дан 3 December 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: