Утилизировать и завершить для коллекций свойств? - PullRequest
0 голосов
/ 20 апреля 2009

Я смотрю на какой-то код vb.net, который только что унаследовал, и не могу понять, почему первоначальный разработчик сделал это.

По сути, каждый класс «Домен» представляет собой набор свойств. И каждый из них реализует IDisposable.Dispose и переопределяет Finalize (). Базового класса не существует, поэтому каждый просто расширяет Object.

Dispose устанавливает для каждого частного var значение Nothing или вызывает _private.Dispose, когда свойство является другим объектом домена. Существует частная переменная, которая отслеживает состояние удаления, и последняя вещь в Dispose - это GC.suppressFinalize (Me)

Завершить только вызовы Me.Dispose и MyBase.Finalize.

Есть ли польза от этого? Любой вред? Здесь нет неуправляемых ресурсов, нет подключений к БД, нет ничего, что могло бы понадобиться.

Ответы [ 4 ]

3 голосов
/ 20 апреля 2009

Мне кажется, что это паттерн VB6.

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

Существует также один случай, когда установка внутренней ссылки на ничего полезного в вызове Dispose: когда член отмечен как Withevents. Без этого вы рискуете получить несобранный объект, обрабатывающий события, когда он действительно не должен этого делать.

0 голосов
/ 20 апреля 2009

Единственная причина, по которой я это вижу - и в лучшем случае это сомнительно, - это то, что эти вещи создаются и удаляются выше в «пищевой цепи», и есть потенциал для некоторых из этих классов предметной области. в какой-то момент иметь ограниченный или неуправляемый ресурс.

Даже это отрывочно ... звучит так, будто кто-то пришел из неуправляемого фона и искал .NET-эквивалент управления вашей памятью и наткнулся на интерфейс IDisposable.

0 голосов
/ 20 апреля 2009

В зависимости от размера объектов и от того, как часто они создаются / уничтожаются, это может гарантировать, что сбор данных может произойти как можно раньше.

Может быть, этот шаблон использовался в других проектах, и он продолжает работать, не понимая, почему он использовался в первую очередь. Садовники обезьян

0 голосов
/ 20 апреля 2009

Мне кажется, что это вообще не нужно, особенно без неуправляемых ресурсов и подключений к данным.

Если вам удастся провести дезинфекцию и опубликовать код, мы могли бы получить немного больше понимания, но реально я не вижу в этом необходимости.

...