Я программист на 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:
У меня есть еще несколько вопросов по примерам.
Оба примера появляются в разделе, озаглавленном Статические конструкторы и порядок инициализации полей , однако в примерах кода не отображается статический ctor - по крайней мере, тот, который я могу легко распознать. Я ожидал, что статический ctor будет иметь то же имя, что и класс, не иметь параметров и ему будет предшествовать ключевое слово ' static '. Поэтому я не понимаю, как примеры соотносятся с заголовком раздела. Что мне здесь не хватает?
Во втором примере (нестатический) ctor выводит значение X, которому явно было присвоено значение 3 в предыдущей строке - и тем не менее, вывод будет 0. Почему?!