Одна причина нет никакой поддержки CLR локального только для чтения. Только для чтения переводится в CLR/CLI initonly код операции. Этот флаг может только быть применен к полям и не имеет никакого значения для локального. На самом деле применение его к локальному, вероятно, произведет код неподдающийся проверке.
Это не означает, что C# не мог сделать этого. Но это дало бы два различных значения той же конструкции языка. Версия для местных жителей не имела бы никакого CLR эквивалентным отображением.
Я думаю поэтому функция, которая имеет переменную только для чтения, никогда может не называться, и существует, вероятно, что-то об этом выходящий из объема, и когда Вы должны были бы?
Только для чтения означает единственное место, переменная экземпляра может быть установлена, находится в конструкторе. При объявлении переменной локально это не имеет экземпляра (это находится только в объеме), и это не может быть затронуто конструктором.
Я был тем коллегой, и это не было дружественным! (просто шутящий)
я не устранил бы функцию, потому что лучше записать сокращенные методы. Это немного похоже на высказывание, что Вы не должны использовать потоки, потому что они тверды. Дайте мне нож и позвольте мне быть ответственным за то, что не был сокращен я.
Лично, я хотел, чтобы другое ключевое слово типа "var" как "inv" (инвариант) или "rvar" избежало помехи. Я изучал F# с последнего и нахожу неизменную вещь, обращающуюся.
Никогда не знал, что Java имел это.
Обращаясь к ответу Jared, это должна была бы, вероятно, просто быть функция времени компиляции - компилятор будет мешать Вам писать в переменную после начального объявления (который должен был бы включать присвоение).
я могу видеть значение в этом? Потенциально - но не много, чтобы быть честным. Если Вы не можете легко сказать, будет ли переменная присвоенной в другом месте в методе, то Ваш метод является слишком длинным.
Если это имеет значение, Java имеет эту функцию (использующий final
модификатор), и я имею очень редко замечаемый, это использовало кроме в случаях, где это имеет , чтобы использоваться, чтобы позволить переменной быть полученной анонимным внутренним классом - и где это используется, это производит мне впечатление от помехи, а не полезной информации.