Деструкторы. Существует второй тип конструкторов — статические конструкторы, или конструкторы класса

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

Существует второй тип конструкторов — статические конструкторы, или конструкторы класса. Конструктор экземпляра инициализирует данные экземпляра, конструктор класса — данные класса. Статический конструктор не имеет параметров, его нельзя вызвать явным образом. Система сама определяет момент, в который требуется его выполнить. Гарантируется только, что это происходит до создания первого экземпляра объекта и до вызова любого статического метода. Некоторые классы содержат только статические данные, и, следовательно, создавать экземпляры таких объектов не имеет смысла. Чтобы подчеркнуть этот факт, в первой версии С# описывали пустой закрытый (p r i v a t e) конструктор. Это предотвращало попытки создания экземпляров класса.

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

Статические конструкторы (static constructor) используются для инициализации статических, неизменяемых (readonly) и других полей.

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

class MyClass { 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.

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

Деструктор - это метод, который вызывается при уничтожении объекта. Так как в.NET CLR используется сборщик мусора, нельзя явно удалить определенный экземпляр. Удаление происходит когда никакой код уже не может воспользоваться этим экземпляром. Деструкторы определяются как методы с именем, совпадающим с именем класса, предваренным знаком ~ (тильда):

public class A

{

~A { Console.WriteLine("Меня удаляют!"); }

}

public class Application

{

public static void Main() { A a = new A(); a = null; }

}

Программа выведет: "Меня удаляют!"

Абстрактные методы и классы.

Методы класса могут быть объявлены как абстрактные. Это означает, что в этом классе нет реализации этих методов. Другими словами, такие методы в классе объявлены, но не определены. Абстрактные методы пишутся с применением к ним модификатора abstract. Класс, в котором есть хотя бы один абстрактный метод, тоже называется абстрактным. Следует отметить, что в таком классе могут быть и обычные методы, которые в нем объявлены и определена их реализация. Нельзя создавать экземпляры абстрактного класса - такой класс может использоваться только в качестве базового класса для построения других классов. При этом, для потомка абстрактного класса есть только две возможности - или он реализует все абстрактные методы базового класса (и тогда для такого класса-потомка мы сможем создавать его экземпляры), или он реализует не все абстрактные методы базового класса (и тогда производный класс тоже будет абстрактным классом и единственная возможность его использования - это создавать на его основе другие классы-потомки).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: