Почему C# запрещает локальные переменные только для чтения?

107
задан Ryan Gates 2 December 2013 в 19:01
поделиться

5 ответов

Одна причина нет никакой поддержки CLR локального только для чтения. Только для чтения переводится в CLR/CLI initonly код операции. Этот флаг может только быть применен к полям и не имеет никакого значения для локального. На самом деле применение его к локальному, вероятно, произведет код неподдающийся проверке.

Это не означает, что C# не мог сделать этого. Но это дало бы два различных значения той же конструкции языка. Версия для местных жителей не имела бы никакого CLR эквивалентным отображением.

13
ответ дан JaredPar 24 November 2019 в 03:42
поделиться

Я думаю поэтому функция, которая имеет переменную только для чтения, никогда может не называться, и существует, вероятно, что-то об этом выходящий из объема, и когда Вы должны были бы?

-3
ответ дан scottm 24 November 2019 в 03:42
поделиться

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

3
ответ дан Jason Punyon 24 November 2019 в 03:42
поделиться

Я был тем коллегой, и это не было дружественным! (просто шутящий)

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

Лично, я хотел, чтобы другое ключевое слово типа "var" как "inv" (инвариант) или "rvar" избежало помехи. Я изучал F# с последнего и нахожу неизменную вещь, обращающуюся.

Никогда не знал, что Java имел это.

7
ответ дан Mike 24 November 2019 в 03:42
поделиться

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

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

Если это имеет значение, Java имеет эту функцию (использующий final модификатор), и я имею очень редко замечаемый, это использовало кроме в случаях, где это имеет , чтобы использоваться, чтобы позволить переменной быть полученной анонимным внутренним классом - и где это используется, это производит мне впечатление от помехи, а не полезной информации.

33
ответ дан Jon Skeet 24 November 2019 в 03:42
поделиться
Другие вопросы по тегам:

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