Delen via


using-instructie- zorg voor het juiste gebruik van wegwerpobjecten

De using instructie zorgt ervoor dat het juiste gebruik van een IDisposable exemplaar wordt gegarandeerd:

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

Wanneer het besturingselement het blok van de using instructie verlaat, wordt een overgenomen IDisposable exemplaar verwijderd. Met name zorgt de using instructie ervoor dat een wegwerpexemplaren worden verwijderd, zelfs als er een uitzondering optreedt binnen het blok van de using instructie. In het voorgaande voorbeeld wordt een geopend bestand gesloten nadat alle regels zijn verwerkt.

Gebruik de await using instructie om een IAsyncDisposable exemplaar correct te gebruiken:

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

Zie de sectie Using async disposable van het artikel Implement a DisposeAsync method voor meer informatie over het gebruik van IAsyncDisposable exemplaren.

U kunt ook een using declaratie gebruiken waarvoor geen accolades nodig zijn:

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

Wanneer deze wordt gedeclareerd in een using declaratie, wordt een lokale variabele verwijderd aan het einde van het bereik waarin deze wordt gedeclareerd. In het voorgaande voorbeeld vindt verwijdering plaats aan het einde van een methode.

Een variabele die door de using instructie of declaratie is gedeclareerd, wordt gelezen. U kunt deze niet opnieuw toewijzen of doorgeven als een ref of out parameter.

U kunt verschillende exemplaren van hetzelfde type in één using instructie declareren, zoals in het volgende voorbeeld wordt weergegeven:

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

Wanneer u meerdere exemplaren in één using instructie declareert, worden ze in omgekeerde volgorde van declaratie verwijderd.

U kunt ook de using instructie en declaratie gebruiken met een exemplaar van een refstruct die past bij het wegwerppatroon. Dat wil gezegd, het heeft een exemplaarmethode Dispose , die toegankelijk, parameterloos is en een void retourtype heeft.

De using instructie kan ook van de volgende vorm zijn:

using (expression)
{
    // ...
}

waarbij expression een wegwerpexemplaren worden geproduceerd. In het volgende voorbeeld ziet u dat:

StreamReader reader = File.OpenText(filePath);

using (reader)
{
    // Process file content
}

Waarschuwing

Nadat het besturingselement in het voorgaande voorbeeld de using instructie verlaat, blijft een wegwerpexemplaren binnen het bereik terwijl deze al is verwijderd. Als u die instantie verder gebruikt, kunt u bijvoorbeeld ObjectDisposedExceptioneen uitzondering tegenkomen. Daarom raden we u aan om een wegwerpvariabele in de using instructie of met de using declaratie te declareren.

C#-taalspecificatie

Zie de sectie Using-instructie van de C#-taalspecificatie en de voorstelnotitie over 'op patroon gebaseerd gebruik' en 'declaraties gebruiken'.

Zie ook