Megosztás a következőn keresztül:


használati utasítás – az eldobható tárgyak megfelelő használatának biztosítása

Az using utasítás biztosítja egy példány megfelelő használatát IDisposable :

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);
        }
    }
}

Amikor a vezérlő elhagyja az utasítás blokkját using , a rendszer egy beszerzett IDisposable példányt megsemmisít. A nyilatkozat különösen biztosítja, using hogy egy eldobható példányt akkor is megsemmisítsen, ha kivétel történik a using nyilatkozat blokkjában. Az előző példában egy megnyitott fájl az összes sor feldolgozása után bezárul.

await using Az utasítás használatával helyesen használhat egy példánytIAsyncDisposable:

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

A példányok használatáról további információt az DisposeAsync metódus implementálásáról IAsyncDisposable szóló cikk Aszinkron használata című szakaszában talál.

Olyan deklarációt using is használhat, amely nem igényel kapcsos zárójelet:

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;
}

Ha deklarációban using deklarálják, a rendszer a helyi változót annak a hatókörnek a végén dobja el, amelyben deklarálva van. Az előző példában az ártalmatlanítás egy metódus végén történik.

Az utasítás vagy deklaráció using által deklarált változók írásvédettek. Nem rendelheti hozzá újra, és nem adhatja át paraméterként vagy out paraméterkéntref.

Egy using utasításban több azonos típusú példányt is deklarálhat, ahogyan az alábbi példa mutatja:

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

Ha több példányt deklarál egy using utasításban, azok a deklaráció fordított sorrendjében lesznek megsemmisítve.

Az utasítást és a using deklarációt egy olyan refstruktúrapéldánysal is használhatja, amely megfelel az eldobható mintának. Ez azt jelent, hogy egy példánymetódussal Dispose rendelkezik, amely elérhető, paraméter nélküli, és visszatérési típussal void rendelkezik.

Az using utasítás a következő formában is szerepelhet:

using (expression)
{
    // ...
}

ahol expression eldobható példányt hoz létre. Az alábbi példa a következőket mutatja be:

StreamReader reader = File.OpenText(filePath);

using (reader)
{
    // Process file content
}

Figyelmeztetés

Az előző példában, miután az ellenőrzés elhagyja az using utasítást, egy eldobható példány továbbra is hatókörben marad, amíg az már el van állítva. Ha tovább használja ezt a példányt, előfordulhat, hogy kivételt tapasztal, ObjectDisposedExceptionpéldául. Ezért javasoljuk, hogy deklaráljon egy eldobható változót az using utasításban vagy a deklarációban using .

C# nyelvspecifikáció

További információkért lásd a C# nyelvspecifikációjának a "using statement" szakaszát, valamint a "mintaalapú használat" és a "deklarációk használata" című javaslati megjegyzést.

Lásd még