|
ООП С# Конструкторы / Деструкторы
В последнем разделе настоящего приложения мы отставим в сторону наследование и рассмотрим еще одну тему, которая важна для ООП: создание и освобождение объектов — или, используя обычную терминологию, конструирование (construction) и уничтожение (destruction) объектов. Предположим, имеется следующий код:
Вы уже знаете, что когда создается переменная x (появляется в области видимости), для нее выделяется память, а когда она покидает область видимости, память возвращается системе. Если вы знакомы с C#, то знаете, что x инициализируется нулевым значением, когда переменная входит в область видимости. Для целых чисел язык определяет, что инициализация происходит автоматически, когда создается int. Не правда ли, было бы неплохо, если бы то же самое происходило с вашими классами? Большинство современных объектно-ориентированных языков поддерживают такую возможность, и C# — не исключение. Эта поддержка обеспечивается средством, называемым конструктором. Конструктор — это специальный метод, вызываемый автоматически при каждом создании объекта данного класса. Вы не обязаны писать конструктор для класса, но если нужна какая-то специальная инициализация, выполняемая автоматически, то соответствующий код нужно поместить именно в конструктор.
Аналогично, языки ООП, включая C#, поддерживают кое-что, называемое деструктором. Деструктор — это метод, вызываемый автоматически при каждом уничтожении объекта (когда переменная выходит из области видимости). Помимо возврата памяти системе, деструкторы, в частности, полезны для классов, представляющих соединение с базой данных или открывающих файлы, либо же для тех, которые включают методы для чтения и записи в базы данных или файлы. В этом случае деструктор может использоваться для гарантии того, что ни одно соединение с базой и ни один файл не останутся открытыми, когда объект покинет области видимости.
Как уже говорилось, средства, представленные .NET Framework, включая сборщик мусора, означают, что деструкторы не только используются гораздо реже в C#, чем в других, предшествующих появлению .NET, языках, но также и то, что определение их более сложно (в самом деле, деструкторы C# — почти единственная часть языка программирования, чей код сложнее, чем в C++). По этой причине мы не будем слишком углубляться в тему деструкторов в данном приложении.
Разработчики на Visual Basic отметят некоторое сходство между конструкторами и методами Initialize() и Form_Load() модулей классов VB. Однако, конструкторы более гибки и мощны.
|
Комментарии
Примеры:
public class car
{
private int k1,k2;
public void change
{
k1=k2;
//в k2 автоматически присвоится 0.
int k3,k4;
k3=k4; //- ошибка
}
}
Спасибо за статьи.
RSS лента комментариев этой записи