Интерфейс IDisposable
часто описывается с точки зрения ресурсов, но в большинстве таких описаний не учитывается, что на самом деле означает «ресурс».
Некоторым объектам необходимо просить внешние объекты делать что-либо от их имени в ущерб другим объектам до дальнейшего уведомления. Например, объекту, охватывающему файловый поток, может потребоваться попросить файловую систему (которая может находиться в любом месте подключенного юниверса) предоставить эксклюзивный доступ к файлу. Во многих случаях потребность объекта во внешнем объекте будет связана с потребностью внешнего кода в объекте. Например, после того, как клиентский код сделает все, что он собирается сделать с вышеупомянутым объектом файлового потока, этому объекту больше не нужно будет иметь эксклюзивный доступ (или какой-либо доступ в этом отношении) к связанному файлу.
Как правило, объект X, который просит объект сделать что-то, пока дальнейшее уведомление не влечет за собой обязательство доставить такое уведомление, но не может доставить такое уведомление, если клиенту X могут понадобиться услуги X. Цель IDisposable
состоит в том, чтобы предоставить единообразный способ информирования объектов о том, что их услуги больше не требуются, с тем чтобы они могли уведомлять объекты (если таковые имеются), которые действовали от их имени, о том, что их услуги больше не требуются. Код, который вызывает IDisposable
, не должен ни знать, ни заботиться о том, какие (если таковые имеются) услуги запрашивал объект у внешних объектов, поскольку IDisposable
просто приглашает объект выполнять обязательства (если таковые имеются) перед внешними объектами.
Чтобы поместить вещи в «ресурсы», объект приобретает ресурс, когда он просит внешнюю сущность сделать что-то от его имени (как правило, хотя и не обязательно, предоставляя исключительное использование чего-либо) до дальнейшего уведомления, и освобождает ресурс, когда он сообщает, что внешнему объекту его услуги больше не требуются. Код, который получает ресурс, не получает «вещь» в той степени, в которой он берет на себя обязательство; освобождение ресурса не оставляет «вещь», но выполняет обязательство.