Закрытие состоит в том, где внутренняя функция имеет доступ к переменным в его внешней функции. Это - вероятно, самое простое короткое объяснение, которое можно получить для закрытий.
Вы всегда получите "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: Константам разрешено зависеть от других констант в той же программе, если зависимости не являются циклическими. Компилятор автоматически выполняет оценку объявлений констант в соответствующем порядке.
эта конкатенация строк происходит во время компиляции, потому что есть только строковые литералы (ищите сворачивание констант в литературе по построению компиляторов).
Не беспокойтесь об этом.