С# имеет оператор using, особенно для объектов IDisposable. Предположительно, любой объект, указанный в операторе using, будет содержать определенный ресурс, который должен быть освобожден детерминированным образом.
Однако мне кажется, что в программировании есть много проектов, которые имеют одно, определенное начало и конец, но не обладают внутренней поддержкой языка. Конструкция using предоставляет возможность использовать встроенные функции редактора кода, чтобы, по крайней мере, четко и естественно выделить область такой конструкции или операции.
То, что я имею в виду, - это такая операция, которая часто начинается с метода BeginXXX() и EndXXX(), хотя существует множество различных вариантов, таких как выполнение асинхронного кода, которое включает в себя "начало" и "старт", присоединиться".
Возьмите этот наивный пример.
webDataOperation.Start();
GetContentFromHardDrive();
webDataOperation.Join();
// Perform operation that requires data from both sources
Что, если вместо этого метод Start возвратил объект, метод IDisposable.Dispose выполняет операцию соединения.
using(webDataOperation.Start()) {
GetContentFromHardDrive();
}
// Perform operation that requires data from both sources
Или, еще лучше, что я специально имел в виду: у меня есть объект, который выполняет высокоспециализированную графическую бликировку и имеет метод Begin() и End() (дизайн также присутствует в DirectX и XNA). Вместо того, чтобы...
using(blitter.BlitOperation()) {
// Do work
}
// Use result
Это кажется более естественным и читаемым, но нецелесообразно, поскольку он использует интерфейс IDisposable и оператор using для непреднамеренных целей? Другими словами, совместимо ли это с перегрузкой оператора неинтуитивным способом?