Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

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

Назначение статического конструктора - инициализация статических полей

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

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

"

вызывается средой исполнения приложений (CLR) перед первым обращением к

любому статическому полю класса или перед первым созданием экземпляра класса.

Конструкторы классов "конструктор:конструкторы классов" – статические и

нестатические (последние рассмотрены в главе 11) обладают рядом особенностей,

отличающих их от других методов классов. Имя конструктора всегда совпадает с

именем того класса, которому он принадлежит. Для конструктора не указывается

тип возвращаемого значения (даже тип void для конструктора запрещён). В теле

конструктора нет необходимости, но допустимо, использовать оператор return.

Для статического конструктора нельзя использовать модификаторы доступа.

Класс может иметь только один статический конструктор. Для статического

конструктора параметры не указываются – спецификация параметров должна быть

пустой.

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

"конструктор:объявление

статического конструктора" :

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

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

Статический конструктор невозможно вызвать непосредственно из программы

– статический конструктор вызывается только автоматически. Следует обратить

внимание, что статический конструктор вызывается после

выполнения

инициализаторов статических полей класса. Основное назначение статического

конструктора – выполнять более сложные действия, нежели инициализаторы полей

и констант. Для статического конструктора недоступны нестатические члены

класса.

В качестве примера определим статический конструктор того класса, в

котором размещён метод Main( ). В том же классе определим несколько

статических

полей

и

выполним

их

инициализацию

как

с

помощью

инициализаторов, так и с применением статического конструктора.

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

using System;

class Progra

m

{

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

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

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

static Program ()

{ numb /= n; n = ar[1] + n; }

static int n = 2;

static void Main()

{

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

}

}

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

numb=10, n = 22

В классе определены статические поля: ссылка ar, связанная с целочисленным

массивом из 4-х элементов; целочисленные переменные numb

и n. В теле

статического конструктора переменным numb

и n присваиваются значения,

отличные от тех, которые они получили при инициализации. Текст программы и

результаты её выполнения иллюстрируют следующие правила, большинство из

которых мы уже приводили.

Инициализация статических полей "поле:инициализация статических полей"

выполняется последовательно (сверху - вниз) по тексту определения класса. Поля,

для которых инициализация ещё не выполнена, имеют умалчиваемые значения.

(Для арифметических типов умалчиваемое значение статического поля равно

нулю.)

В

инициализирующих

выражениях

статических

полей

допустимо

использовать обращения к другим статическим членам классов. После выполнения

инициализации статических полей выполняется статический конструктор, действия

которого могут изменить значения статических полей.

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