- •Программа курса
- •Ооп. Основные понятия
- •Конструкторы, деструкторы и др. Работа с объектами в .Net
- •Ссылочные типы и Типы значения. Передача параметров в .Net
- •Принципы ооп
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Важные классы (типы данных)
- •Обобщенные контейнеры
- •Статические методы и свойства
- •Обработка исключений
- •Интерфейсы и слабая связь между классами
- •Рефлексия и создание объектов из внешних модулей по имени класса
Конструкторы, деструкторы и др. Работа с объектами в .Net
(конструкторы, деструктор, геттер, сеттер, ссылка, время жизни объекта, сборщик мусора, область видимости)
Некоторые методы играют специальную роль и имеют специальные названия. Так метод, читающий свойство называется getter (геттер), метод задающий значение свойства называется setter (сеттер).
Есть группа методов, которые позволяют создавать объекты – это конструкторы. В тексте объявления класса их можно найти по следующим признакам:
имя конструктора совпадает с именем класса
у конструктора не указан тип возвращаемого значение (это всегда ссылка на объект класса)
Часто конструкторов бывает несколько, с различными наборами параметров. Если мы не указали в объявлении класса ни одного конструктора, то компилятор самостоятельно определяет один конструктор – конструктор ‘по умолчанию’. У такого конструктора нет параметров. Именно такой конструктор вызван во фрагменте 2 для создания объекта.
Есть еще специальный метод, отвечающий за разрушение объектов – деструктор. Деструктор отличается от конструктора тем, что перед его именем стоит тильда и у него никогда не бывает параметров. Для класса Company деструктор выглядел бы так ~Company(). Кроме того, что деструктор, как правило, у класса один, пользователи класса его еще и никогда не вызывают.
Рассмотрим более подробно использование и время жизни объектов в .Net.
В
.Net программист работает
с объектами только через ссылки. Ссылка
– это сущность, которая имеет имя, тип
и может быть связана с объектом того же
типа, что и сама ссылка. В свою очередь,
объекты в .Net не имеют имен
и доступны только через ссылки. Графически
ситуация во фрагменте 2 может быть
представлена так.
Рис 1. Схематическое представление объекта и ссылки, возникающих во фрагменте 2.
Таким образом, программист в коде программы всегда работает только со ссылкой объекта. Сам объект был создан оператором new и конструктором и не имеет имени в тексте программы.
Следствия. На один объект может указывать несколько ссылок, а может не указывать и ни одной. Если на объект нет ссылок, то использовать такой объект в программа не возможно.
Объект может остаться без ссылок, например, если ссылку направить на другой объект или ссылке на объект присвоить специальное значение null. Это значение говорит о том, что ссылка никуда не ссылается и не готова к работе.
За такими объектами, которые остались без ссылок следит Сборщик Мусора .Net или Garbage Collector. Он вызывает деструкторы таких объектов и тем самым освобождает ресурсы компьютера для создания других объектов.
Таким образом, время жизни объектов начинается с момента выполнения оператора new и заканчивается разрушением объекта сборщиком мусора. Программист не вызывает сборщик мусора явно. За его вызовом по мере необходимости следит .Net. Таким образом, разрушение объекта не вполне подконтрольно программисту. Это обстоятельство имеет некоторые негативные последствия, но в целом, уменьшает возможность возникновения критических ошибок программирования, связанных с уничтожением объектов.
Время жизни самих ссылок ограничивается блоком, в котором они были объявлены. Поэтому есть еще один случай, когда объект может остаться без ссылки – когда все ссылки на объект прекратили свое существование.
Есть еще одно важное понятие языка программирования – область видимости. Оно характеризует области кода программы, в которых доступны существующие объекты. Нужно различать область видимости и область существования.
Упражнения для подготовки к экзамену.
Каким образом в программе доступны объекты?
Имеют ли объекты в программе имена?
Если на один объект существует несколько ссылок, и некоторое свойство объекта было изменено через одну из них. Будет ли это свойство одинаковым при чтении через другие ссылки на этот же объект?
Пусть на объект имелась единственная ссылка. Перечислите случаи, при которых этот объект может оказаться без ссылок.
Как создаются и уничтожаются объекты в .Net?
К чему приводит присваивание одной ссылочной переменной другой переменной?
