Язык программирования C#9 и платформа .NET5. Страница 190
На заметку! Интерфейс
IDisposablerefFinalize()Dispose()refВ целях иллюстрации применения интерфейса
IDisposableSimpleDisposeMyResourceWrapperSystem.Object.Finalize()IDisposableusing System;namespace SimpleDispose{ // Реализация интерфейса IDisposable. class MyResourceWrapper : <b>IDisposable</b> { // После окончания работы с объектом пользователь. // объекта должен вызывать этот метод public void Dispose() { // Очистить неуправляемые ресурсы.... // Освободить другие освобождаемые объекты, содержащиеся внутри. // Только для целей тестирования Console.WriteLine("***** In Dispose! *****"); } }}Обратите внимание, что метод
Dispose()Dispose()Finalize()Dispose()IDisposableDispose()Dispose()using System;using System.IO;using SimpleDispose;Console.WriteLine("***** Fun with Dispose *****\n");// Создать освобождаемый объект и вызвать метод Dispose().// для освобождения любых внутренних ресурсовMyResourceWrapper rw = new MyResourceWrapper();rw.Dispose();Console.ReadLine();Конечно, перед попыткой вызова метода
Dispose()IDisposableIDisposableisasConsole.WriteLine("***** Fun with Dispose *****\n");MyResourceWrapper rw = new MyResourceWrapper();if (rw is IDisposable){ rw.Dispose();}Console.ReadLine();Приведенный пример раскрывает очередное правило, касающееся управления памятью.
Правило. Неплохо вызывать метод
Dispose()IDisposableDispose()Dispose()С предыдущим правилом связано одно предостережение. Несколько типов в библиотеках базовых классов, которые реализуют интерфейс
IDisposableDispose()System.IO.FileStreamIDisposableDispose()Close()// Предполагается, что было импортировано пространство имен System.IOstatic void DisposeFileStream(){ FileStream fs = new FileStream("myFile.txt", FileMode.OpenOrCreate); // Мягко выражаясь, сбивает с толку! // Вызовы этих методов делают одно и то же! fs.Close(); fs.Dispose();}В то время как "закрытие" (close) файла выглядит более естественным, чем его "освобождение" (dispose), подобное дублирование методов очистки может запутывать. При работе с типами, предлагающими псевдонимы, просто помните о том, что если тип реализует интерфейс
IDisposableDispose()
Перейти на страницу:
Изменить размер шрифта: