Разработка компиляторов

       

Конструкторы и деструкторы


class TestClass { public TestClass() { … } public ~TestClass () { ReleaseResources(); } public ReleaseResources() { // closing connections, releasing system resources etc. }

Конструкторы/деструкторы не возвращают значений.

Для статических классов конструкторы могут быть закрытыми ( private ).

Конструкторы используются при создании конкретных экземпляров класса. Чаще всего, задачей конструктора является инициализация значений, используемых при дальнейшей работе с данным классом. Конструкторы не имеют возвращаемого значения. Если класс не содержит ни одного явного описания конструктора, то компилятор генерирует пустой конструктор, в котором выполняется единственное действие - вызов базового класса (если таковой существует). Обычно конструкторы объявляются с модификатором public , но возможно определение закрытого ( private ) конструктора, например, в случае класса без методов (такие классы иногда специально создаются для хранения статических или глобальных переменных, так как в C# любая переменная должна принадлежать какому-либо объекту). Приведем примеры конструкторов для класса Матрица:

public Matrix() // implements default constructor { for (int i=0; i<n; i++) for (int j=0; j<n; j++) elements[i,j] = 0; }

public Matrix (int val) // implements constructor with one parameter { for (int i=0; i<n; i++) for (int j=0; j<n; j++) elements[i,j] = val; }

В C# нет деструкторов в привычном понимании этого слова, т.е. объекту не может быть приписан специальный метод, физически уничтожающих объект по явному запросу пользователя. Дело в том, что за освобождение памяти в .NET отвечает механизм сборки мусора и потому явное уничтожение объектов в C# не предусмотрено. Предусмотрены только так называемые завершители (finalizers), которые вызываются сборщиком мусора непосредственно перед уничтожением объекта. Но так как невозможно предсказать когда произойдет сборка мусора (и даже произойдет ли вообще), более надежным способом считается выделение завершающих действий в отдельный метод с именем Close или Dispose. Этот метод может вызывать как завершитель, так и сам пользователь.



Содержание раздела