Порядок инициализации статического поля (C #) - может кто-нибудь объяснить этот фрагмент?

Я программист на C ++, изучающий C #. В настоящее время я читаю C # 4.0 in a Nutshell.

Я наткнулся на этот оператор / фрагмент на странице 74:

Инициализаторы статических полей запускаются в порядок, в котором поля объявил. Следующий пример иллюстрирует это: X инициализируется как 0 и Y инициализируется значением 3.

class Foo
{
    public static int X = Y; // 0
    public static int Y = 3; // 3
}

Я не понимаю, как X может быть присвоено значение Y без предварительного объявления Y. Я что-то здесь упускаю?

Кроме того, исходя из опыта работы с C ++, я предпочитаю использовать термин ctor для конструктора - однако я еще не встречал термин в C # - термин ctor также используется в мир C #?

[Edit]

Еще один пример на той же странице (в книге, упомянутой ранее):

class Program
{
    static void Main() { Console.WriteLine (Foo.X); } // 3
}
class Foo
{
    public static Foo Instance = new Foo();
    public static int X = 3;
    Foo() { Console.WriteLine (X); } // 0
}

В книге указано (для примера выше):

В примере печатается 0, а затем по 3 потому что инициализатор поля, создает экземпляр Foo, выполняемый до X инициализируется значением 3:

У меня есть еще несколько вопросов по примерам.

  1. Оба примера появляются в разделе, озаглавленном Статические конструкторы и порядок инициализации полей , однако в примерах кода не отображается статический ctor - по крайней мере, тот, который я могу легко распознать. Я ожидал, что статический ctor будет иметь то же имя, что и класс, не иметь параметров и ему будет предшествовать ключевое слово ' static '. Поэтому я не понимаю, как примеры соотносятся с заголовком раздела. Что мне здесь не хватает?

  2. Во втором примере (нестатический) ctor выводит значение X, которому явно было присвоено значение 3 в предыдущей строке - и тем не менее, вывод будет 0. Почему?!

5
задан voidstar 17 May 2011 в 06:54
поделиться