using-Anweisung (C#-Referenz)using Statement (C# Reference)

Bietet eine praktische Syntax, die den ordnungsgemäßen Einsatz von IDisposable-Objekten sicherstelltProvides a convenient syntax that ensures the correct use of IDisposable objects.

BeispielExample

Im folgenden Beispiel wird die Verwendung der using-Anweisung gezeigt.The following example shows how to use the using statement.

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

HinweiseRemarks

File und Font sind Beispiele für verwaltete Typen, die auf nicht verwaltete Ressourcen zugreifen (in diesem Fall Dateihandles und Gerätekontexte).File and Font are examples of managed types that access unmanaged resources (in this case file handles and device contexts). Es gibt viele andere Arten von nicht verwalteten Ressourcen und Klassenbibliothekstypen, die sie einschließen.There are many other kinds of unmanaged resources and class library types that encapsulate them. Alle Typen dieser Art müssen die IDisposable-Schnittstelle implementieren.All such types must implement the IDisposable interface.

Wenn die Lebensdauer des ein IDisposable Objekt auf eine einzelne Methode beschränkt ist, sollten Sie deklarieren und instanziieren Sie ihn in eine using Anweisung.When the lifetime of an IDisposable object is limited to a single method, you should declare and instantiate it in a using statement. Die using-Anweisung ruft die Methode Dispose ordnungsgemäß für das Objekt auf. Wenn Sie sie, wie vorher gezeigt, verwenden, führt dies auch dazu, dass das Objekt den gültigen Bereich verlässt, sobald Dispose aufgerufen wird.The using statement calls the Dispose method on the object in the correct way, and (when you use it as shown earlier) it also causes the object itself to go out of scope as soon as Dispose is called. Innerhalb des using-Blocks ist das Objekt schreibgeschützt und kann nicht geändert oder neu zugewiesen werden.Within the using block, the object is read-only and cannot be modified or reassigned.

Die using-Anweisung stellt sicher, dass Dispose aufgerufen wird, auch wenn eine Ausnahme ausgelöst wird, während Sie die Methode für das Objekt aufrufen.The using statement ensures that Dispose is called even if an exception occurs while you are calling methods on the object. Sie können das gleiche Ergebnis erzielen, indem Sie das Objekt in einen Try-Block einfügen und dann using in einem Finally-Block aufrufen; so wird die Dispose-Anweisung vom Compiler übersetzt.You can achieve the same result by putting the object inside a try block and then calling Dispose in a finally block; in fact, this is how the using statement is translated by the compiler. Das vorherige Codebeispiel wird zur Kompilierzeit auf den folgenden Code erweitert (beachten Sie die zusätzlichen geschweiften Klammern zum Erstellen des eingeschränkten Gültigkeitsbereichs für das Objekt):The code example earlier expands to the following code at compile time (note the extra curly braces to create the limited scope for the object):

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

Wie im folgenden Beispiel gezeigt, können mehrere Instanzen eines Typs in einer using-Anweisung deklariert werden.Multiple instances of a type can be declared in a using statement, as shown in the following example.

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 an die using-Anweisung übergeben; dies wird jedoch nicht empfohlen.You can instantiate the resource object and then pass the variable to the using statement, but this is not a best practice. In diesem Fall verbleibt das Objekt im Gültigkeitsbereich, nachdem das using-Steuerelement den Block verlassen hat, obwohl es wahrscheinlich keinen Zugriff auf dessen nicht verwaltete Ressourcen mehr hat.In this case, the object remains in scope after control leaves the using block even though it will probably no longer have access to its unmanaged resources. Das heißt, es wird nicht mehr vollständig initialisiert.In other words, it will no longer be fully initialized. Wenn Sie versuchen, das Objekt außerhalb des using-Blocks zu verwenden, riskieren Sie, dass eine Ausnahme ausgelöst wird.If you try to use the object outside the using block, you risk causing an exception to be thrown. Aus diesem Grund ist es im Allgemeinen besser, das Objekt in der using-Anweisung zu instanziieren und dessen Bereich auf den using-Block zu begrenzen.For this reason, it is generally better to instantiate the object in the using statement and limit its scope to the using block.

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

Weitere Informationen zum Freigeben von IDisposable anzuzeigen, mit Objekten, die IDisposable implementieren.For more information on disposing of IDisposable objects, see Using objects that implement IDisposable.

C#-ProgrammiersprachenspezifikationC# Language Specification

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

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
using-Direktiveusing Directive
Garbage CollectionGarbage Collection
Verwenden von Objekten, die IDisposable implementierenUsing objects that implement IDisposable
IDisposable-SchnittstelleIDisposable interface