Megosztás:


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őelem elhagyja az using utasítás blokkját, a rendszer a beszerzett IDisposable példányt megsemmisíti. 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 IAsyncDisposable további információt az DisposeAsync metódus implementálásáról 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.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

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 elérhető, paraméter nélküli és visszatérési típusú példánymetódussal Dispose rendelkezik void .

A return blokkon belül using továbbra is garantált az ártalmatlanítás. A fordító újraírja azt egy try/finally, így az erőforrás Dispose mindig meghívja, mielőtt a metódus ténylegesen visszatér.

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 ezt az űrlapot 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 kell deklarálnia egy eldobható változót az using utasításban vagy a deklarációban using .

C# nyelvspecifikáció

További információ: A C# nyelvspecifikációjánakusing utasítás szakasza.

Lásd még