Интересы общего характера: Finalize() и Lazy - C#
Формулировка задачи:
Читаю Троелсена. Появились некоторые вопросы. Чтобы не создавать две темы, решил сделать одну и назвать ее более обобщенно. Итак:
1. Типы, которые имеют неуправляемые ресурсы. Троелсен предлагает наследоваться от IDisposable, чтобы была возможность у пользователя освобождать неуправляемые ресурсы вручную + сделать финализатор, где также происходит освобождение этих же ресурсов. Я так понял, что если я делаю класс финализируемым, то создается лишняя таблица в памяти для сборщика ресурсов, и соответственно происходят лишнии инструкции, если все таки уничтожать объект будет сборщик. Вопрос в том, зачем тогда делать финализатор, если можно обойтись IDisposable? Ну ответ очевиден - для того, чтобы если человек забыл освободить, то сборщик мусора все равно освободит. Но тогда человек получается идиот, если в документации по использованию данного класса будет черным по белому написано, что освобождать НУЖНО вручную.
2. Смотрю отложенную инициализацию с помощью системного класса Lazy<T>. Троелсен пишет: В частности, для получения фактических хранимых данных (в этом случае — объекта AllTracks, поддерживающего 10 000 объектов Song) мы должны использовать доступ*ное
только для чтения
свойство Value класса Lazy<T> ." Вопрос следующий, как это свойство может быть только для чтения, если свойства только для чтения могут быть инициализированы только в конструкторе класса? Получается, если оно так и есть, то это уже нифига не отложенная инициализация, и инициализация объекта класса T будет происходить при конструировании класса Lazy<T>. Смотрел объявления в классе Lazy<T>. Value тамне
стоит только для чтения. Ошибка Троелсена? Или я что-то не догоняю? Решение задачи: «Интересы общего характера: Finalize() и Lazy»
textual
Листинг программы
class NewYear { public int DaysLeft { get { var d = DateTime.Now; return (new DateTime(d.Year+1, 1, 1) - d.Date).Days; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д