Тип «Закрываемое»

В языке существует понятие закрываемого ресурса. Закрываемый ресурс - это значение некоторого типа, которое получается от операционной системы. Для использования этот ресурс необходимо получить у операционной системы, а после окончания использования - вернуть. Это необходимо делать потому, что ресурсы операционной системы являются конечными. Ситуация, когда ресурс не возвращается после использования, называется утечкой ресурсов. Для того, чтобы сделать работу с закрываемым ресурсом более простой (и чтобы минимизировать утечку ресурсов операционной системы) служит тип Закрываемое.

Закрываемое является базовым типом для типов, использующих системные ресурсы. При создании экземпляра, являющегося потомком типа Закрываемое, выполняется получение системного ресурса. В тот момент, когда ресурс становится ненужным, следует вызвать метод Закрыть(), который является контрактом типа Закрываемое. Во время вызова метода Закрыть() гарантируется, что ресурс будет возвращен операционной системе и будут выполнен все необходимые действия перед тем, как ресурс вернется операционной системе.

Для облегчения работы с закрываемыми типами предназначен модификатор переменной исп. Важной особенностью такого модификатора является то, что метод Закрыть() будет вызван автоматически в тот момент, когда переменная выходит из области видимости. В этом случае очевидно, что использование ресурса закончено и его надо освободить.

Из этого утверждения есть исключение, связанное с передачей закрываемого ресурса за границу текущей области видимости. Например, какой-либо закрываемый экземпляр создается в методе и возвращается в вызывающий метод. В этом случае вызывающий код берет на себя всю ответственность за жизненный цикл закрываемого ресурса. Такое использование усложняет контроль за ресурсами и не рекомендуется для постоянного использования.

Пример работы с закрываемым ресурсом — см. Работа с закрываемыми ресурсами.