Лучшим подходом часто является предоставление вложенным идентифицируемым элементам индикатора того, следует ли размещать вложенный элемент вместе с контейнером, если срок полезного использования элемента никогда не будет превышать срок службы контейнера (в этом случае утилизация контейнераможет распоряжаться предметом), или можно быть уверенным, что последний объект, кроме контейнера, которому понадобится содержащийся предмет, будет знать о его существовании и необходимости удаления (имеется в виду, что контейнеру не нужно беспокоиться об удалении, так как другойэлемент может с этим справиться).
В качестве простого примера, предположим, что кто-то разрабатывал структуру пользовательского интерфейса и хотел предоставить элемент управления, который должен отображать Picture
, и предоставляет средство, с помощью которого код может предоставитьизображение для отображения.Предположим далее, что некоторые типы Picture
имеют ресурсы, которые необходимо утилизировать.В некоторых ситуациях код может захотеть отобразить определенное значение Picture
на нескольких элементах управления, которые могут быть удалены не все одновременно.В такой ситуации было бы плохо, если бы распоряжаться элементом управления было бы распоряжаться его изображением.С другой стороны, существуют другие ситуации, когда код может создать изображение с целью отображения, передать его элементу управления, а затем больше не заботиться о нем.В такой ситуации код, предоставляющий изображение, может знать, что изображение должно быть удалено, когда элемент управления больше не нуждается в нем, но может не знать, когда это произойдет.
Использование параметра для указания того, должно ли изображениебыть Disposed
позволит чистый код в обоих вышеупомянутых сценариях.Альтернативный подход, который использует Winforms, заключается в том, чтобы иметь события, которые происходят, когда изменяется либо изображение элемента управления, либо когда изменяется свойство Image.Код, который устанавливает свойство Image элемента управления для изображения, которое требует удаления, может использовать эти события для его обработки.