Основы объектно-ориентированного программирования на языке C# book | Page 119

7.3 Конструктори класiв } // решта визначення класу } Присвоювання значень статичним полям вiдбувається в порядку ı̈х оголошення. Конструктор статичний або екземплярний не обов’яз- ково має iнiцiалiзувати усi поля до яких має доступ. При створенi екземпляру класу усi поля приймають, вiдповiдно до типу, початкове нульове значення. Вiдзначимо також, що допускається визначати в класi одночасно статичний конструктор i конструктор екземпляра без параметрiв. Хо- ча ı̈х списки параметрiв iдентичнi, конфлiкту не виникає, тому що статичний конструктор виконується до конструктора екземпляра. Ящо у вас є бiльше одного класу зi статичним конструктором, то невiдомо, який зi статичних конструкторiв буде викликаний першим. Тому ви не повиннi розмiщувати в статичному конструкторi код, ви- конання якого залежить вiд результатiв роботи iнших статичних кон- структорiв. Розглянемо такий приклад: using System; namespace StaticConstructor { public class TestStaticConstructor { private int y = Inity(); private int x = Initx(); public static int a = Inita0(); public static int b = Initb0(); static TestStaticConstructor() { Console.WriteLine(" Call static TestStaticConstructor()"); Console.WriteLine("a= " + a); Console.WriteLine("b= " + b); } private static int Initx() { Console.WriteLine("Initialization X"); return 1; } private static int Inity() { Console.WriteLine("Initialization Y"); return 2; } private static int Inita0() { Console.WriteLine("Initialization static A0"); return 3; 119