Usted siempre obtendrá "somethingelse". Esto es porque ConstantB depende de ConstantA.
Incluso puede cambiar de línea y obtendrá el mismo resultado. El compilador sabe que ConstantB depende de ConstantA y lo manejará en consecuencia, incluso si lo escribe en clases parciales.
Para estar completamente seguro, puede ejecutar VS Command Prompt y llamar a ILDASM. Ahí puede ver el código compilado real.
Además, si se intenta hacer lo siguiente obtendrá un error de compilación:
private const string ConstantB = ConstantA + "Else";
private const string ConstantA = "Something" + ConstantB;
error: La evaluación del valor constante para 'ConsoleApplication2.Program.ConstantB' implica una definición circular Este tipo de prueba demuestra que el compilador conoce sus dependencias.
Agregado: Spec referencia señalado por Jon Skeet:
This is explicitly mentioned in section 10.4 of the C# 3 spec: Constants are permitted to depend on other constants within the same program as long as the dependencies are not of a circular nature. The compiler automatically arranges to evaluate the constant declarations in the appropriate order.
@Svish, véase el comentario de Jon Skeet en su respuesta –
@ Nathan, gracias, no se habían dado cuenta de esto: p – Svish