C#: действительно ли это полевое присвоение безопасно?

Закрытие состоит в том, где внутренняя функция имеет доступ к переменным в его внешней функции. Это - вероятно, самое простое короткое объяснение, которое можно получить для закрытий.

11
задан Svish 17 August 2009 в 13:02
поделиться

3 ответа

Вы всегда получите "SomethingElse". Это потому, что ConstantB зависит от ConstantA.

Вы даже можете переключать строки, и вы получите тот же результат. Компилятор знает, что ConstantB зависит от ConstantA, и будет обрабатывать его соответствующим образом, даже если вы напишете его в частичных классах.

Чтобы быть полностью уверенным, вы можете запустить VS Command Prompt и вызвать ILDASM. Там вы можете увидеть фактический скомпилированный код.

Кроме того, если вы попытаетесь сделать следующее, вы получите ошибку компиляции:

private const string ConstantB = ConstantA + "Else";
private const string ConstantA = "Something" + ConstantB;

Ошибка : оценка постоянного значения для ' Это доказывает, что компилятор знает свои зависимости.


Добавлено: ссылка на спецификацию, указанная Джоном Скитом :

Это явно упоминается в разделе 10.4 спецификации C # 3: Константам разрешено зависеть от других констант в той же программе, если зависимости не являются циклическими. Компилятор автоматически выполняет оценку объявлений констант в соответствующем порядке.


37
ответ дан 3 December 2019 в 01:20
поделиться

эта конкатенация строк происходит во время компиляции, потому что есть только строковые литералы (ищите сворачивание констант в литературе по построению компиляторов).

Не беспокойтесь об этом.

3
ответ дан 3 December 2019 в 01:20
поделиться

Он всегда должен оцениваться как "SomethingElse"

2
ответ дан 3 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

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