отчет по практике. Колледж инновационных технологий КарТУ
Скачать 74.63 Kb.
|
1.8 Объекты. Создание объекта. Конструктор. Операция new.Конструктором называется множество операторов кода, которому передается управление при создании объекта. Синтаксис объявления конструктора аналогичен объявлению метода — те же спецификаторы доступа, имя, список параметров. Особенности конструктора заключаются в том, что: конструктор НЕ ИМЕЕТ НИКАКОГО возвращаемого спецификатора, даже void ; имя конструктора полностью совпадает с именем класса или структуры; в классе и в структуре можно объявлять множество вариантов конструкторов. Они должны отличаться списками параметров. В структуре невозможно объявить конструктор с пустым списком параметров; не существует выражения вызова для конструктора, управление в конструктор передается посредством выполнения специальной операции new. Конструктор умолчания (конструктор с пустым списком параметров) строится транслятором по умолчанию. Если класс не содержит явных объявлений конструкторов, именно этот конструктор берет на себя работу по превращению области памяти в объект. Class X{}::::::::::X x = new X(); // Работает конструктор умолчания. Однако попытка объявления ЛЮБОГО варианта конструктора (с параметрами или без) приводит к тому, что транслятор перестает заниматься построением собственных версий конструкторов. Отныне в классе нет больше конструктора умолчания. Теперь все зависит от соответствия оператора определения объекта построенному нами конструктору. Объявим в производном классе оба варианта конструкторов. 1.9 This в конструкторе,деструкторе,методе,свойстве. This в заголовке конструктора.Нестатический метод класса определяет индивидуальное поведение объекта и поэтому вызывается "от имени" данного объекта. В большинстве объектно-ориентированных языков программирования реализована возможность непосредственного обращения из нестатического метода (а также свойства) к объекту, который обеспечил выполнение кода данного метода или свойства. Аналогичная возможность обращения к объекту реализуется в теле нестатических конструкторов и деструктора. В C# связь метода (свойства, конструктора, деструктора) с объектом обеспечивается первичным выражением (элементарным выражением языка) this. Это выражение не требует никакого дополнительного объявления, его тип соответствует классу, содержащему объявление данного метода.По своей сути первичное выражение this в данном контексте является ссылкой на объект, обеспечивающий выполнение данного кода. Если метод возвращает ссылку на объект, который вызвал данный метод, this можно использовать в качестве возвращаемого значения оператора return. Для метода ToString все ссылки на объекты, представляющие данный класс, неразличимы. Следующий пример подтверждает тот факт, что this в нестатическом методе является всего лишь ссылкой на объект — представитель данного класса. Конструктор не вызывается. Передача управления конструктору осуществляется при выполнении операции new. Ситуация: в структуре или классе объявляются различные версии конструкторов, специализирующиеся на создании объектов разной модификации. При этом все объявленные конструкторы вынуждены выполнять один и тот же общий перечень регламентных работ по инициализации объектов. Для сокращения размера кода можно оставить ОДИН конструктор, выполняющий ВСЮ "черновую" обязательную работу по созданию объектов. 1.10 Уничтожение объектов в управляемой памяти. Класс GC. Деструктор и метод Finalize.В среде CLR сборщик мусора выполняет функции автоматического диспетчера памяти. Сборщик мусора управляет выделением и освобождением памяти для приложения. Следовательно, разработчикам, работающим с управляемым кодом, не нужно писать код для выполнения задач по управлению памятью. Автоматическое управление памятью позволяет устранить распространенные проблемы, которые связаны с утечкой памяти из-за того, что объект не был освобожден, или попыткой доступа к памяти для объекта, который был освобожден. В этой статье описаны основные понятия сборки мусора. Класс System.GC Функционал сборщика мусора в библиотеке классов .NET представляет класс System.GC. Через статические методы данный класс позволяет обращаться к сборщику мусора. Как правило, надобность в применении этого класса отсутствует. Наиболее распространенным случаем его использования является сборка мусора при работе с неуправляемыми ресурсами, при интенсивном выделении больших объемов памяти, при которых необходимо такое же быстрое их освобождение. Рассмотрим некоторые методы и свойства класса System.GC: Метод AddMemoryPressure информирует среду CLR о выделении большого объема неуправляемой памяти, которую надо учесть при планировании сборки мусора. В связке с этим методом используется метод RemoveMemoryPressure, который указывает CLR, что ранее выделенная память освобождена, и ее не надо учитывать при сборке мусора. Метод Collect приводит в действие механизм сборки мусора. Перегруженные версии метода позволяют указать поколение объектов, вплоть до которого надо произвести сборку мусора Метод GetGeneration(Object) позволяет определить номер поколения, к которому относится переданый в качестве параметра объект Метод GetTotalMemory возвращает объем памяти в байтах, которое занято в управляемой куче Метод WaitForPendingFinalizers приостанавливает работу текущего потока до освобождения всех объектов, для которых производится сборка мусора. |