// Конструктор экземпляра, public Cons()    {

beta = 100;

Console.WriteLine("В конструкторе экземпляра.");

class ConsDemo {

static void Main() {

Cons ob = new Cons();

Console.WriteLine("Cons.alpha: " + Cons.alpha);

Console.WriteLine("ob.beta: " + ob.beta);

}

}

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

В статическом конструкторе.

В конструкторе экземпляра.

Cons.alpha: 99 ob.beta: 100

Обратите внимание на то, что конструктор типаstaticвызывается автоматически, когда класс загружается впервые, причем до конструктора экземпляра. Из этого можно сделать более общий вывод: статический конструктор должен выполняться до любого конструктора экземпляра. Более того, у статических конструкторов отсутствуют модификаторы доступа — они пользуются доступом по умолчанию, а следовательно, их нельзя вызывать из программы.

Статические классы

Класс можно объявлять какstatic.Статический класс обладает двумя основными свойствами. Во-первых, объекты статического класса создавать нельзя. И во-вторых, статический класс должен содержать только статические члены. Статический класс создается по приведенной ниже форме объявления класса, видоизмененной с помощью ключевого словаstatic.

static classимя_класса{11...

В таком классе все члены должны быть объявлены какstatic.Ведь если класс становится статическим, то это совсем не означает, что статическими становятся и все его члены.

Статические классы применяются главным образом в двух случаях. Во-первых, статический класс требуется при созданииметода расширения.Методы расширения связаны в основном с языком LINQ и поэтому подробнее рассматриваются в главе 19. И во-вторых, статический класс служит для хранения совокупности связанных друг с другом статических методов. Именно это его применение и рассматривается ниже.

В приведенном ниже примере программы классNumericFnтипаstaticслужит для хранения ряда статических методов, оперирующих числовым значением. А поскольку все члены классаNumericFnобъявлены какstatic,то этот класс также объявлен какstatic,чтобы исключить получение экземпляров его объектов. Таким образом, классNumericFnвыполняет организационную роль, предоставляя удобные средства для группирования логически связанных методов.

// Продемонстрировать применение статического класса.

static class NumericFn {

// Возвратить обратное числовое значение, static public double Reciprocal(double num) { return 1/num;

}

// Возвратить дробную часть числового значения, static public double FracPart(double num) { return num - (int) num;

}

Перейти на страницу:

Похожие книги