Програмування на c #
Курс програмування C # Quick Guide # 0153;
Частина 5.
5.6. Робота з ресурсами, які вимагають явного звільнення
У заключній частині розділу про інтерфейси я вже згадував оператор using. який дозволяє замінити громіздку конструкцію try-catch-finally при роботі з ресурсів, які вимагають свого звільнення відразу ж після закінчення роботи з ними. Конструкція using гарантує, що ресурс буде звільнений навіть якщо в процесі роботи з ним виникла виняткова ситуація. Нижче наведено код, що демонструє використання обох конструкцій. Припустимо, є текстовий файл, в якому в певному форматі зберігаються послідовності точок (X, Y), розділених символом "|".
Сенс цієї ілюстрації - показати, що з такими ресурсами як файл потрібно працювати акуратно. Для читання файлу використовується клас StreamReader. дозволяє працювати з даними файлу, як з потоком символів. Після читання даних з файлу доступ до нього потрібно повернути операційній системі, і саме з цієї причини робота з цим класом виконується в контексті оператора using. Файл, пов'язаний з екземпляром класу StreamReader буде коректно закритий, навіть якщо в ході читання виникнуть помилки або непередбачені події.
Звідки компілятор знає, що перед ним клас, інкапсулює в собі розділяється ресурс, і як самостійно створити такий клас? Щоб компілятор розумів, що йому робити з об'єктом, зазначеним в заголовку конструкції using після завершення виконання основного блоку, відповідний клас повинен реалізовувати інтерфейс IDisposable. Даний інтерфейс містить визначення одного єдиного методу Dispose (). в реалізації якого і повинен бути розміщений код для звільнення задіяних програмою розподілених ресурсів. Приклади визначення таких класів ви без зусиль знайдете в MSDN.