zawsze dostanie "somethingelse". Dzieje się tak dlatego, że ConstantB zależy od ConstantA.
Możesz nawet przełączać linie, a otrzymasz taki sam wynik. Kompilator wie, że ConstantB zależy od ConstantA i odpowiednio je obsłuży, nawet jeśli napiszesz je w klasach częściowych.
Aby być całkowicie pewnym, można uruchomić wiersz polecenia VS i wywołać funkcję ILDASM. Tam możesz zobaczyć rzeczywisty skompilowany kod.
Dodatkowo, jeśli starają się wykonać następujące czynności otrzymasz błąd kompilacji:
private const string ConstantB = ConstantA + "Else";
private const string ConstantA = "Something" + ConstantB;
błąd: Ocena stałej wartości dla „ConsoleApplication2.Program.ConstantB” obejmuje okrągły definicji Ten rodzaj udowadnia, że kompilator zna swoje zależności.
Dodano: Spec odniesienia podkreślił 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, patrz komentarz Jon Skeet na jego odpowiedź –
@Nathan, dzięki, nie zauważyłem tego: p – Svish