Скачиваний:
66
Добавлен:
24.03.2015
Размер:
165.38 Кб
Скачать

10.5. Статический конструктор

Назначение статического конструктора - инициализация статических полей класса. Статический конструктор вызывается средой исполнения приложений (CLR) перед первым обращением к любому статическому полю класса или перед первым созданием экземпляра класса.

Конструкторы классов - статические и нестатические (последние рассмотрены в главе 11) обладают рядом особенностей, отличающих их отдругих методов классов. Имя конструктора всегда совпадает с именем того класса, которому он принадлежит. Для конструктора не указывается тип возвращаемого значения (даже тип void для конструктора запрещён). В теле конструктора нет необходимости, но допустимо, использовать оператор return. Для статического конструктора нельзя использовать модификаторы доступа.

Класс может иметь только один статический конструктор. Для статического конструктора параметры не указываются - спецификация параметров должна быть пустой.

Формат объявления статического конструктора:

static имя_класса()

{операторы_ тела_конструктора }

Статический конструктор невозможно вызвать непосредственно из программы - статический конструктор вызывается только автоматически. Следует обратить внимание, что статический конструктор вызывается после выполнения инициализаторов статических полей класса. Основное назначение статического конструктора - выполнять более сложные действия, нежели инициализаторы полей и констант. Для статического конструктора недоступны нестатические члены класса.

В качестве примера определим статический конструктор того класса, в котором размещён метод Main(). В том же классе определим несколько статических полей и выполним их инициализацию как с помощью инициализаторов, так и с применением статического конструктора.

// 10_08.cs - Инициализаторы и статический конструктор

class Lekc10_08

{

static int[] ar = new int[] { 10, 20, 30, 40 };

static int numb = n + ar[3] - ar[1];

// Статический конструктор:

static Lekc10_08()

{

numb /= n;

n = ar[1] + n;

}

static int n = 2;

public static void Main()

{

Console.WriteLine("numb = {0}, n = {1}", numb, n);

}

}

Результат выполнения программы:

numb = 10, n = 22

В классе определены статические поля: ссылка аr, связанная с целочисленным массивом из 4-х элементов; целочисленные переменные numb и n. В теле статического конструктора переменным numb и n присваиваются значения, отличные от тех, которые они получили при инициализации. Текст программы и результаты её выполнения иллюстрируют следующие правила, большинство из которых мы уже приводили.

Инициализация статических полей выполняется последовательно (сверху - вниз) по тексту определения класса. Поля, для которых инициализация ещёне выполнена, имеют умалчиваемые значения. (Для арифметических типов умалчиваемое значение статического поля равно нулю.) В инициализирующих выражениях статических полей допустимо использовать обращения к другим статическим членам классов. После выполнения инициализации статических полей выполняется статический конструктор, действия которого могут изменить значения статических полей.

Соседние файлы в папке Lekc_C#