// Конструктор экземпляра, 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
В таком классе все члены должны быть объявлены какstatic.Ведь если класс становится статическим, то это совсем не означает, что статическими становятся и все его члены.
Статические классы применяются главным образом в двух случаях. Во-первых, статический класс требуется при создании
В приведенном ниже примере программы класс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;
}