using – zajištění správného použití uvolnitelných objektů

Příkaz using zajišťuje správné použití IDisposable instance:

var numbers = new List<int>();
using (StreamReader reader = File.OpenText("numbers.txt"))
{
    string line;
    while ((line = reader.ReadLine()) is not null)
    {
        if (int.TryParse(line, out int number))
        {
            numbers.Add(number);
        }
    }
}

Když ovládací prvek opustí blok using příkazu, zlikviduje se získaná IDisposable instance. Konkrétně příkaz using zajistí, že se uvolnitelná instance odstraní i v případě, že dojde k výjimce v rámci bloku using příkazu. V předchozím příkladu se otevřený soubor zavře po zpracování všech řádků.

Použijte příkaz await using k správnému IAsyncDisposable použití instance:

await using (var resource = new AsyncDisposableExample())
{
    // Use the resource
}

Další informace o používání instancí naleznete v části Použití asynchronního jednorázovéhopoužití v článku Implementace metody DisposeAsync.IAsyncDisposable

Můžete také použít usingdeklaraci , která nevyžaduje složené závorky:

static IEnumerable<int> LoadNumbers(string filePath)
{
    using StreamReader reader = File.OpenText(filePath);
    
    var numbers = new List<int>();
    string line;
    while ((line = reader.ReadLine()) is not null)
    {
        if (int.TryParse(line, out int number))
        {
            numbers.Add(number);
        }
    }
    return numbers;
}

Při deklaraci je using místní proměnná uvolněna na konci oboru, ve kterém je deklarována. V předchozím příkladu dochází k odstranění na konci metody.

Proměnná deklarovaná příkazem using nebo deklarací je jen pro čtení. Nemůžete ho znovu přiřadit ani předat jako ref parametr.out

V jednom using příkazu můžete deklarovat několik instancí stejného typu, jak ukazuje následující příklad:

using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
    // Process both files
}

Když v jednom using příkazu deklarujete několik instancí, budou uvolněny v obráceném pořadí deklarace.

Můžete také použít using příkaz a deklaraci s instancí ref struktury , která odpovídá vzoru na jedno použití. To znamená, že má metodu instance Dispose , která je přístupná, bez parametrů a má návratový void typ.

Příkaz using může být také z následujícího formuláře:

using (expression)
{
    // ...
}

v případě, že expression vytváří jednorázovou instanci. Následující příklad ukazuje, že:

StreamReader reader = File.OpenText(filePath);

using (reader)
{
    // Process file content
}

Upozorňující

V předchozím příkladu poté, co ovládací prvek opustí using příkaz, zůstane uvolnitelná instance v oboru, zatímco je již uvolněna. Pokud tuto instanci použijete dále, může dojít například ObjectDisposedExceptionk výjimce . Proto doporučujeme deklarovat jednorázovou proměnnou v rámci using příkazu nebo deklarace using .

specifikace jazyka C#

Další informace naleznete v části Příkaz using specifikace jazyka C# a návrh poznámky k "použití na základě vzoru" a "using deklarace".

Viz také