2009-04-20 2 views
0

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

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

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

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

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

ответ

3

Это поражает меня как образец VB6.

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

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

+0

+1 для withevents упоминание – Randolpho

+0

также для «ранних дней .Net» упоминание: есть много старого плохого кода, который на самом деле не является ошибкой разработчика: просто слабая связь того, как все сочетается , –

+0

точно мой пункт. Когда .Net вышел, большинство разработчиков VB6 изо всех сил пытались понять, что с ним делать. И введение GC и одноразового шаблона было одним из тех пунктов борьбы. Для того чтобы понять, что нужно изменить, нужно было много инвестиций, и большинство людей не имели доступа к этой информации, поэтому они пошли со своими обычными образцами. –

0

Мне кажется, что это то, что НЕОБХОДИМО вообще, особенно без неуправляемых ресурсов и соединений с данными.

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

0

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

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

0

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

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

Смежные вопросы