Оператор using в C#
C# и .NET обеспечивают управление ресурсами для управляемых объектов через сборщик мусора. Вам не нужно явно выделять и освобождать память для управляемых объектов. Операции очистки для любых неуправляемых ресурсов должны выполняться в деструкторе C#.
Чтобы позволить программисту явно выполнять эти действия по очистке, объекты могут предоставлять метод Dispose, который можно вызывать, когда объект больше не нужен. Оператор C# — using определяет границу объекта, за пределами которой объект автоматически уничтожается. Оператор using в C# завершается, когда заканчивается блок операторов using или когда выполнение выходит из блока операторов using косвенно, например, возникает исключение.
Оператор using позволяет указать несколько ресурсов в одном операторе. Объект также может быть создан вне оператора using. Объекты, указанные в блоке using, должны реализовывать интерфейс IDisposable. Платформа вызывает метод Dispose объектов, указанных в операторе using, при выходе из блока.
Класс MyManagedClass не является частью .NET Framework и используется в примере только для демонстрации. Класс MyManagedClass должен быть освобожден явно и реализует интерфейс IDisposable.
using (MyManagedClass mnObj = new MyManagedClass())
{
......
mnObj.Use(); //используется объект mnObj
......
} //компилятор уничтожит объект mnObj здесь
......
//Пример 2
......
MyManagedClass mnObj =new MyManagedClass()
using (mnObj)
{
......
mnObj.Use();//используется объект mnObj
......
}//объект mnObj будет уничтожен здесь
......
Обратите внимание, что директива using в C# отличается от оператора using. Директива «using» используется для предоставления псевдонима для пространства имен.
// псевдоним пространства имен
using System;
using System.IO;
class Program {
static void Main(string[] args)
{
// путь к файлу
string file = @"M:DocumentsTextfile.txt";
// Запись в файл с помощью StreamWriter
string[] textLines2 = { "Myrusakov.ru",
"Myrusakov.ru" };
// объект writer будет существовать в
// в пределах конструкции using
using(StreamWriter writer = new StreamWriter(file))
{
foreach(string ln in textLines2)
{
writer.WriteLine(ln);
}
}
// вывод на экран содержимого файла
Console.WriteLine(File.ReadAllText(file));
Console.ReadKey();
}
}
Таким образом, открывая файл в C# следует позаботиться об использовании ресурсов памяти, для чего и используется конструкция using.