Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы C#.doc
Скачиваний:
58
Добавлен:
10.02.2015
Размер:
430.59 Кб
Скачать

Основы c#. Урок 23. Статические конструкторы

Статическими к классе могут быть и конструкторы. Если обычный конструктор вызывается в момент создания экземпляра класса, то статический - в самом начале, т. е. перед созданием первого экземпляря класса.

В статическом конструкторе можно задать начальные значения для статических переменных класса. Вот пример:

classMyClass

{

public static int data;

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

static MyClass()

{

data=10;

}

//Конструктор

public MyClass()

{

data++;

}

}

class Test

{

public static void Main()

{

MyClass a=new MyClass();

MyClass b=new MyClass();

System.Console.WriteLine(MyClass.data);

}

}

Указанный фрагмент выведет на экран 12. Действительно, сначала вызовется статический конструктор, который присвоит значение 10 перемнной data. Затем для каждого созданного экземпляра класса MyClass вызовется обычный конструктор, к котором переменная data увеличится каждый раз на 1.

Обратите внимание, что оба конструктора без параметра. Противоречия тут нет, так как один из них - статический, а другой - нет.

Основы c#. Урок 24. Закрытые конструкторы или классы без экземпляров

В C# нет глобальных переменных, функций или констант. Все они обязательно должны принадлежать некоторому классу. И если у вас имеется класс, содержащий в себе, например, некоторые нужные вам константы, то экземпляры такого класса вам не нужны (так как вы создали этот класс исключительно как хранилище). Чтобы запретить создание экземпляров класса, вы объявляете конструктор в нем как закрытый (то есть с модификатором private или вовсе без модификатора - так как отсутствие модификатора и подразумевает private). Это означает, что создать экземпляр такого класса не удастся (что нам и надо).

Вот пример такого класса:

namespacetest

{

//Класс без экземпляра

class MyClass

{

//Закрытый конструктор

privateMyClass()

{

}

public static int MyPhoneNumber=1239999;

}

class Test

{

public static void Main()

{

System.Console.WriteLine(MyClass.MyPhoneNumber);

}

}

}

Тут у нас класс MyClass имеет закрытый конструктор, так что создавать его экземпляры мы не можем. Так, следующий код будет ошибочным:

class Test

{

public static void Main()

{

MyClass a=new MyClass(); //ошибка!!!

}

}

Использовать же статические переменные и константы такого класса мы можем (так, мы выводим на экран константу MyPhoneNumber).

Разумеется, в таком классе может содержать и методы:

classMyClass

{

//Закрытый конструктор

privateMyClass()

{

}

public static int MyPhoneNumber=1239999;

public static int SomeNumber=1;

public static int GetSomeNumber(){

SomeNumber++;

return SomeNumber;

}

}

class Test

{

public static void Main()

{

System.Console.WriteLine(MyClass.GetSomeNumber()); //Выведется 2

System.Console.WriteLine(MyClass.GetSomeNumber()); //Выведется 3

}

}

Указанный фрагмент выведет 2 и 3.