Если класс, который вы создаете , логически владеет (1) конструктором, внедрившим ресурс, то он должен утилизировать его внутренне. Если он не владеет ресурсом, то он ничего не должен делать и полагаться на потребителя, чтобы решить, когда его следует утилизировать.
Если вашему классу принадлежит ссылка на неуправляемый ресурс, вам также может понадобиться реализовать финализатор (деструктор), поскольку нет никакой гарантии, что кто-нибудь когда-либо вызовет ваш Dispose
метод вообще.
В общем, вы хотите избежать случаев, когда вызывающая сторона должна решить, когда им следует утилизировать объект, переданный конструктору класса. Вызывающая сторона может преждевременно избавиться от ресурса (или удерживать его дольше, чем необходимо). Это не всегда легко достичь в некоторых проектах ... к сожалению, шаблон «Одноразовые объекты» не всегда идеально сочетается с самим собой.
(1) Под владением Я имею в виду, что ваш класс контролирует время жизни ресурса, которому он передается, и никакой другой код не содержит ссылку на него. Если какой-либо другой код (время жизни которого не связано с временем жизни вашего класса) содержит ссылку на ресурс и будет использовать его независимо, то вы не являетесь владельцем этого ресурса.