Почему resharper предлагает поля только для чтения

ОТПРАВЬТЕСЬ СКАНИРОВАНИЕ устаревшее http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm

12
задан SteveC 31 January 2012 в 17:37
поделиться

5 ответов

Когда ссылочный тип объявлен как доступный только для чтения, неизменяемым является указатель, но не объект, на который он указывает. Это означает, что:

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

Прочтите подробную статью об этом

Отметьте член данных класса C # как доступный только для чтения, если он доступен только для чтения

26
ответ дан 2 December 2019 в 04:33
поделиться

Метод SaveData () не изменяет переменную настроек, он изменяет одно из ее свойств. Содержание настроек (то, к чему оно относится) задается только в конструкторе.

0
ответ дан 2 December 2019 в 04:33
поделиться

На самом деле вы правы, а Решарпер ошибается. Поле должно быть помечено только для чтения, только если оно полностью неизменяемо. В вашем примере, если вы сделаете его доступным только для чтения и включите анализ кода Microsoft, он предупредит вас, что у параметров есть изменяемые свойства.

0
ответ дан 2 December 2019 в 04:33
поделиться

Вы не меняете настройки вне конструктора, объект тот же, что и в SaveData. Свойства объекта могут изменяться, но не ссылка на объект, так что это кажется логичным с точки зрения Resharper.

0
ответ дан 2 December 2019 в 04:33
поделиться

Помните, что основная причина использования стандартов кодирования и шаблонов проектирования состоит в том, чтобы облегчить понимание вашего кода людьми.

Пометив поле как «только для чтения», вы рассказывают читателю класса что им не нужно учитывать , как значение поля изменяется.

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

Если значения в объекте, на который указывает поле, изменяются в течение времени существования объекта, то я не думаю, что поле должно быть помечено как доступное только для чтения. (Например, указанный объект должен вести себя так, как если бы он был неизменным к моменту вызова подрядчика в вашем классе)

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

5
ответ дан 2 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

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