Ответ 1
Вы всегда получите "SomethingElse". Это связано с тем, что ConstantB зависит от ConstantA.
Вы можете даже переключать линии, и вы получите тот же результат. Компилятор знает, что ConstantB зависит от ConstantA и будет обрабатывать его соответственно, даже если вы напишете его в частичных классах.
Чтобы быть уверенным, вы можете запустить VS Command Prompt и вызвать ILDASM. Там вы можете увидеть фактический скомпилированный код.
Кроме того, если вы попытаетесь сделать следующее, вы получите ошибку компиляции:
private const string ConstantB = ConstantA + "Else";
private const string ConstantA = "Something" + ConstantB;
Ошибка. Оценка постоянного значения для ConsoleApplication2.Program.ConstantB включает в себя круговое определение Это доказывает, что компилятор знает свои зависимости.
Добавлено: Ссылка на спецификацию, отмеченная Jon Skeet:
Это прямо указано в разделе 10.4 спецификации С# 3: Константам разрешено зависеть от других констант в рамках одной и той же программы, если зависимости не имеют кругового характера. Компилятор автоматически упорядочивает вычисления константных объявлений в соответствующем порядке.