Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на вопросы_2003.doc
Скачиваний:
7
Добавлен:
16.04.2019
Размер:
275.46 Кб
Скачать

40. Понятие деструктора.

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

Деструкторы используются для уничтожения экземпляров классов.

Класс может иметь только один деструктор.

Деструктор Finalize()наиболее близко соответствует концепции традиционного деструктора. Если объявить в классе метод Finalize() он будет автоматически вызываться при уничтожении экземпляра класса.

Деструкторы Dispose() и Close() работают таким образом, что при желании вы можете определить один из них для класса, понимая при этом, что клиентский код обязан явно вызывать этот метод для освобождения ресурсов. Ресурсы освобождаются сразу после того, как отпадает надобность в них. Недостаток: вы полагаетесь на то, что клиентский код будет вести себя корректно и вызовет этот метод (однако это может и не произойти).

41. Управление памятью. Алгоритм работы Garbage Collector.

В программировании сборка мусора— одна из форм автоматического управления памятью. Специальный код, называемый сборщиком мусора (garbage collector), периодически освобождает память, удаляя объекты, которые уже не будут востребованы приложением — то есть производит сборку мусора.

Cборка мусора — технология, позволяющая, с одной стороны, упростить программирование, избавив программиста от необходимости вручную удалять объекты, созданные в динамической памяти, с другой — устранить вызванные неправильным ручным управлением памятью ошибки.

Программист лишь создаёт динамические объекты и пользуется ими, он может не заботиться об удалении объектов, поскольку это делает за него среда.

Хотя, в общем случае, невозможно точно определить момент, когда объект был использован в последний раз и больше не нужен, сборщики мусора используют консервативные оценки, позволяющие определить, что в будущем объект гарантированно не будет использоваться.

Алгоритм выставления флагов

Простой алгоритм определения достижимых объектов, «алгоритм пометок» (Mark and Sweep), заключается в следующем:

*для каждого объекта хранится бит, указывающий, достижим ли этот объект из программы или нет;

*изначально все объекты, кроме корневых, помечаются как недостижимые;

*рекурсивно просматриваются и помечаются как достижимые объекты ещё не помеченные и до которых можно добраться из корневых объектов по ссылкам;

*те объекты, у которых бит достижимости не был установлен, считаются недостижимыми.

42 Управление доступом к элементам сущности.

Любая сущность — объект.

Объект — некоторая сущность в виртуальном пространстве, обладающая определённым состоянием и поведением, имеет заданные значения свойств (атрибутов) и операций над ними (методов). Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат одному или нескольким классам, которые в свою очередь определяют поведение (являются моделью) объекта. Время с момента создания объекта (конструкция) до его уничтожения (деструкция) называется временем жизни объекта. Объект наряду с понятием «класс», является важным понятием объектно-ориентированного подхода в программировании. Объекты обладают свойствами наследования, инкапсуляции и полиморфизма.

Термин объект в программном обеспечении впервые был введен в языке Simula и применялся для моделирования реальности. Объект обладает состоянием, поведением и идентичностью; структура и поведение схожих объектов определяет общий для них класс; термины «экземпляр класса» и «объект» взаимозаменяемы.

В настоящем объектно-ориентированном языке все элементы так называемой предметной области (problem domain) выражаются через концепцию объектов.