Freigeben über


using-Anweisung (C#-Referenz)

Stellt eine intuitive Syntax bereit, die die richtige Verwendung von IDisposable-Objekten sicherstellt.

Beispiel

Das folgende Beispiel veranschaulicht die Verwendung der using-Anweisung.

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

Hinweise

File und Font sind Beispiele für verwaltete Typen, die auf nicht verwaltete Ressourcen zugreifen (in diesem Fall Dateihandles und Gerätekontexte). Es gibt viele andere Arten von nicht verwalteten Ressourcen und Klassenbibliothekstypen, die sie kapseln. Alle diese Typen müssen die IDisposable-Schnittstelle implementieren.

Wenn Sie ein IDisposable-Objekt verwenden, sollten Sie es grundsätzlich deklarieren und in einer using-Anweisung instanziieren. Die using-Anweisung ruft die Dispose-Methode für das Objekt auf die richtige Weise auf und (bei Verwendung wie oben gezeigt) verursacht, dass das Objekt seinen Gültigkeitsbereich verlässt, sobald Dispose aufgerufen wird. Innerhalb des using-Blocks ist das Objekt schreibgeschützt und kann nicht geändert oder neu zugewiesen werden.

Mit der using-Anweisung wird sichergestellt, dass Dispose auch aufgerufen wird, wenn ein Ausnahmefehler auftritt, während Sie Methoden für das Objekt aufrufen. Sie erzielen dasselbe Ergebnis, indem Sie das Objekt in einen try-Block einfügen und Dispose in einem finally-Block aufrufen. Auf diese Weise wird die using-Anweisung vom Compiler übersetzt. Der Code im oben gezeigten Beispiel wird bei der Kompilierung auf folgenden Code erweitert (beachten Sie die zusätzlichen geschweiften Klammern zur Erstellung des begrenzten Gültigkeitsbereichs für das Objekt):

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}

Mehrere Instanzen eines Typs können in einer using-Anweisung deklariert werden, wie im folgenden Beispiel gezeigt.

using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

Sie können das Ressourcenobjekt instanziieren und die Variable dann an die using-Anweisung übergeben, dies empfiehlt sich jedoch nicht. In diesem Fall bleibt das Objekt im Gültigkeitsbereich, wenn das Steuerelement den using-Block verlässt, auch wenn es möglicherweise keinen Zugriff mehr auf die nicht verwalteten Ressourcen hat. In anderen Worten, es wird nicht mehr vollständig initialisiert. Wenn Sie versuchen, das Objekt außerhalb des using-Blocks zu verwenden, riskieren Sie, dass eine Ausnahme ausgelöst wird. Aus diesem Grund sollten Sie das Objekt in der using-Anweisung instanziieren und den Gültigkeitsbereich auf den using-Block beschränken.

            Font font2 = new Font("Arial", 10.0f);
            using (font2) // not recommended
            {
                // use font2
            }
            // font2 is still in scope
            // but the method call throws an exception
            float f = font2.GetHeight(); 


C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch

Referenz

C#-Schlüsselwörter

using-Direktive (C#-Referenz)

Implementieren der Methoden "Finalize" und "Dispose" zum Bereinigen von nicht verwalteten Ressourcen

Konzepte

C#-Programmierhandbuch

Implementieren einer Dispose-Methode

Weitere Ressourcen

C#-Referenz

Garbage Collection