Оператор 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.

Источник