2013-11-11 3 views
1

У меня возникли проблемы в разнице понимания междуРазличные статические конкретизации

private static Singleton instance; 

и

private static readonly Singleton instance = new Singleton(); 

Почему я должен использовать readonly keword здесь ???

может кто-нибудь, пожалуйста, объясните простыми словами

ответ

1

The «readonly» не требуется. Но это полезно. Это просто говорит компилятору, что вы никогда не намерены переназначать что-либо еще экземпляру после вашего первоначального создания.

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

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

См. Документацию Майкрософт here.

+0

+1 Я думаю, что это самое простое объяснение –

+0

Что делать, если я изменю его на 'volatile', будет лучше, чем' readonly' –

+0

'volatile' и «readonly» - это совершенно разные понятия. Бессмысленно думать о том, что он «лучше», чем другой. Это разные инструменты для разных целей. Чего вы пытаетесь достичь? – Baldrick

0

переменная помечена для чтения означает, что он может быть назначен только в static initialization

Общий язык выполнения заботится о инициализации переменной

0

Примите правило: если вы не укажете какое-либо значение в поле класса в своем коде, за исключением конструктора (независимо от того, является ли он статичным или экземпляром), объявите его как readonly. В противном случае объявите его без ключевого слова readonly.

Это поможет вам избежать собственных логических ошибок.

1

Если вы спросите, нужен ли вам readonly? Ответ - нет. Он просто гарантирует, что вы не изменяете значение переменной непреднамеренно в любом месте вашей программы.

Когда статическое поле помечено как readonly, это означает, что ему может быть присвоено значение только в двух местах.

  1. Статическое полевое устройство.
  2. Статический конструктор.

Также стоит упомянуть readonly не играет никакой роли в «Отражении». Вы можете установить значение в поле с пометкой readonly в любое время, используя «Отражение»

Смежные вопросы