Vous obtiendrez toujours "SomethingElse". C'est parce que ConstantB dépend de ConstantA.
Vous pouvez même changer de ligne et vous obtiendrez le même résultat. Le compilateur sait que ConstantB dépend de ConstantA et le gérera en conséquence, même si vous l'écrivez dans des classes partielles. Pour être complètement sûr, vous pouvez exécuter l'invite de commande VS et appeler ILDASM. Là, vous pouvez voir le code réel compilé.
De plus, si vous essayez de faire ce qui suit, vous obtiendrez une erreur de compilation:
private const string ConstantB = ConstantA + "Else";
private const string ConstantA = "Something" + ConstantB;
Erreur: L'évaluation de la valeur constante pour « ConsoleApplication2.Program.ConstantB » implique une définition circulaire Cela prouve que le compilateur connaît ses dépendances.
Ajouté: référence Spec a par 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, s'il vous plaît voir le commentaire de Jon Skeet sur sa réponse –
@Nathan, merci, n'avaient pas remarqué ceci: p – Svish