У вас уже есть действительно хороший ответ, но я хочу представить другой подход.
Это действительно вопрос владения.Тот, кто владеет этим DataSet
, несет ответственность за его уничтожение.Но кому это действительно принадлежит?В этом случае FlipDataSet
создает новый экземпляр, но передает владение, потому что он возвращает этот экземпляр вызывающей стороне и не продолжает удерживать саму ссылку.Это означает, что управление жизненным циклом экземпляра теперь является обязанностью вызывающей стороны.
При обобщении этой ситуации для других сценариев выгодно думать с точки зрения владения.То, что свойство или метод возвращают экземпляр IDisposable
, не означает, что он передает право собственности.В идеале вы должны обратиться к документации этого API для подсказок.Тем не менее, в большинстве случаев, которые я видел, есть смысл, что если экземпляр извлекается из свойства, то этот экземпляр все еще принадлежит классу, в который он был помещен, и в этом случае он не отвечает за вызовы для управления временем жизни.Аналогичным образом, если экземпляр извлекается из метода, то обычно это тот случай, когда метод создал этот экземпляр и не предпринимает никаких усилий для продолжения сохранения ссылки на класс, а в этом случае ответственность вызывающих сторон управляет временем жизни.