Программирование на C# - ООП C# - Конструкторы и деструкторы

Программирование на C# - ООП C#

ООП С# Конструкторы / Деструкторы

В последнем разделе настоящего приложения мы отставим в сторону наследование и рассмотрим еще одну тему, которая важна для ООП: создание и освобождение объектов — или, используя обычную терминологию, конструирование (construction) и уничтожение (destruction) объектов. Предположим, имеется следующий код:

 
{
int x;
// прочий код
} 

Вы уже знаете, что когда создается переменная x (появляется в области видимости), для нее выделяется память, а когда она покидает область видимости, память возвращается системе. Если вы знакомы с C#, то знаете, что x инициализируется нулевым значением, когда переменная входит в область видимости. Для целых чисел язык определяет, что инициализация происходит автоматически, когда создается int. Не правда ли, было бы неплохо, если бы то же самое происходило с вашими классами? Большинство современных объектно-ориентированных языков поддерживают такую возможность, и C# — не исключение. Эта поддержка обеспечивается средством, называемым конструктором. Конструктор — это специальный метод, вызываемый автоматически при каждом создании объекта данного класса. Вы не обязаны писать конструктор для класса, но если нужна какая-то специальная инициализация, выполняемая автоматически, то соответствующий код нужно поместить именно в конструктор.

Аналогично, языки ООП, включая C#, поддерживают кое-что, называемое деструктором. Деструктор — это метод, вызываемый автоматически при каждом уничтожении объекта (когда переменная выходит из области видимости). Помимо возврата памяти системе, деструкторы, в частности, полезны для классов, представляющих соединение с базой данных или открывающих файлы, либо же для тех, которые включают методы для чтения и записи в базы данных или файлы. В этом случае деструктор может использоваться для гарантии того, что ни одно соединение с базой и ни один файл не останутся открытыми, когда объект покинет области видимости.

Как уже говорилось, средства, представленные .NET Framework, включая сборщик мусора, означают, что деструкторы не только используются гораздо реже в C#, чем в других, предшествующих появлению .NET, языках, но также и то, что определение их более сложно (в самом деле, деструкторы C# — почти единственная часть языка программирования, чей код сложнее, чем в C++). По этой причине мы не будем слишком углубляться в тему деструкторов в данном приложении.

Разработчики на Visual Basic отметят некоторое сходство между конструкторами и методами Initialize() и Form_Load() модулей классов VB. Однако, конструкторы более гибки и мощны.

 

Комментарии  

0 #1 Михаил 17.07.2011 00:54
"Для целых чисел язык определяет, что инициализация происходит автоматически, когда создается int." - следует сделать поправку, что автоматически значение присвоится только в случае, когда переменная объявлена как базовая внутри класса, а не внутри какой-либо функции этого класса.
Примеры:
public class car
{
private int k1,k2;
public void change
{
k1=k2;
//в k2 автоматически присвоится 0.
int k3,k4;
k3=k4; //- ошибка
}
}

Спасибо за статьи.
Цитировать

Добавить комментарий


Защитный код
Обновить