Tipps und Tricks: using-Block

Der using-Block (oder auch using-Anweisung genannt) stellt die korrekte Verwendung von Objekten, welche von dem Interface IDisposable abgeleitet sind sicher. Grundsätzlich sollte bei allen IDisposable-Objekten am Ende der Verwendung die Funktion Dispose() aufgerufen werden. Dadurch verlieren die Variablen des Objektes Ihre Gültigkeit, indem diese auf null gesetzt werden. Jeder Klasse muss jedoch seine eigene konkrete Dispose-Funktionalität implementieren. Doch warum ist diese Funktionalität zu empfehlen? Durch das Löschen der Referenz der internen Variablen werden die Objekte vom Garbage Collector gelöscht. Zumeist kommen solche Objekte bei Streams vor. Bisher haben wir bei Streams immer gesagt, dass man die Close() aufrufen soll. Haben wir also bisher etwas falsch gemacht? Nein, denn die Close()-Funktion macht zumeist nichts anderes als die Funktion Dispose() aufzurufen.
Nun zum Syntax: Als erstes notieren wir das Schlüsselwort using. Welches jedoch nicht mit dem using-Schlüsselwort zur Einbindung von Namensräumen verwechselt werden darf. Es folgt ein rundes Klammernpaar, in welchem wir ein Objekt erzeugen und dieses einer Variablen zuweisen. Auf diese Variable kann nun ausschließlich innerhalb des dazugehörigen Blocks zugegriffen werden. Am Ende des Blocks wird nun automatisch die Dispose()-Funktion aufgerufen. Das Beispiel zeigt einen Dateizugriff. Der auskommentierte Code stellt hierbei den Code dar, welcher dem Code des using-Blocks entspricht.

Program.cs

using System;
using System.IO;

namespace CSV20.using_Block
{
    class Program
    {
        static void Main(string[] args)
        {
            using (StreamWriter oStream = new StreamWriter("test.txt"))
            {
                oStream.WriteLine("Hallo Welt!");
            }

            //StreamWriter oStream = new StreamWriter("test.txt");
            //try
            //{
            //    oStream.WriteLine("Hallo Welt!");
            //}
            //finally
            //{
            //    if (oStream != null)
            //        oStream.Dispose();
            //}

            Console.Write("Programmende. Bitte Taste drücken ... ");
            Console.ReadKey();
        }
    }
}
Download

LinksRechts