2016-08-13 4 views
0
private static string Test = a ? "test" : "hello"; 
private static bool a = Test == "test"; 

Они, кажется, зависит от друг друга, но во время компиляции становится = ложь»Test =„привет“, независимо от того, я думаю, что это что-то делать с булевы быть установленным на false, но если кто-то может объяснить, как это компилируется, это было бы хорошо.Странная статическая инициализация компилирует в C#

+0

Заказ только не имеет значения, потому что вы получите тот же результат в обоих случаях. Если вы сначала установите 'a',' Test' будет 'null', если вы сначала установите' Test', 'a' будет' false'. –

+0

Возможно, ссылка поможет https://msdn.microsoft.com/en-us/library/aa645758(v=vs.71).aspx – Steve

ответ

4

Основано на C#. Технические характеристики:

Инициализаторы статической переменной поля класса соответствуют последовательности назначений, которые выполняются в текстовом порядке в , которые они отображаются в объявлении класса.

private static string Test = a ? "test" : "hello"; // a is false - default for bool 

Теперь тест относится к строке «привет»

private static bool a = Test == "test"; // a remains false as Test != "test" 
0

Это компилируется, потому что все имена видны в области. Это приводит к результатам, которые вы испытываете из-за инициализации переменных по умолчанию до 0 и порядка выполнения .

Смежные вопросы