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ého použití v článku Implementace metody DisposeAsync.IAsyncDisposable
Můžete také použít using
deklaraci , 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".