7 Stimmen

Was bedeutet using(object obj = new Object())?

Was bedeutet diese Anweisung in C#?

        using (object obj = new object())
        {
            //random stuff
        }

0 Stimmen

Zu Ihrer Information ist dies in Abschnitt 8.13 der C#-Spezifikation dokumentiert.

0 Stimmen

Ist damit Ihre Frage beantwortet? Was sind die Verwendungszwecke von "using" in C#?

12voto

Justin Niessner Punkte 235353

Dies bedeutet, dass obj implementiert IDisposible und werden nach dem Ende der Veranstaltung ordnungsgemäß entsorgt. using Block. Es ist funktionell dasselbe wie:

{
  //Assumes SomeObject implements IDisposable
  SomeObject obj = new SomeObject();
  try
  {
    // Do more stuff here.       
  }
  finally
  { 
    if (obj != null)
    {
      ((IDisposable)obj).Dispose();
    }
  }
}

0 Stimmen

Oh! Schön! Danke für die Antwort.

2 Stimmen

Fast richtig, using() impliziert keine catch-Anweisung, sondern nur try/finally.

0 Stimmen

@Jay Zeng, wie in Grafik? Wenn ich meine Graphics innerhalb einer "using"-Anweisung verwende, muss ich sie nicht entsorgen?

5voto

Darin Dimitrov Punkte 990883
using (object obj = new object())
{
    //random stuff
}

Ist gleichbedeutend mit:

object obj = new object();
try 
{
    // random stuff
}
finally {
   ((IDisposable)obj).Dispose();
}

0 Stimmen

Fast gleichwertig. Im ersten Beispiel ist obj an der } außer Reichweite. Im zweiten Beispiel ist es noch im Geltungsbereich. Ähnlich wie bei der for-while-Äquivalenz.

1voto

pm100 Punkte 40532

Warum gibt es sie dann?

Es gibt sie für Klassen, bei denen die Lebensdauer wichtig ist, insbesondere wenn die Klasse eine Ressource im Betriebssystem umschließt und man sie sofort freigeben möchte. Andernfalls müssten Sie auf die (nicht deterministischen) Finalizer der CLR warten.

Beispiele, Datei-Handles, DB-Verbindungen, Socket-Verbindungen, ....

0 Stimmen

Ich widerspreche - es ist ein bekanntes Muster und so fördert die gemeinsame gute Praxis. for-Schleife ist auch syntaktischer Zucker - aber es wird immer verwendet, weil es ein gemeinsames Idiom ist auch ich versuchte zu erklären, warum Sie es verwendet sehen - und warum Sie die Nicht-Zucker-Version sehen würden

0voto

Pharabus Punkte 6031

Es ist eine Möglichkeit, ein Objekt in den Geltungsbereich zu bringen, damit die Dispose-Methode beim Beenden aufgerufen wird. Dies ist insbesondere für Datenbankverbindungen sehr nützlich. Ein Kompilierfehler tritt auf, wenn das Objekt idisposable nicht implementiert.

0voto

Johannes Rudolph Punkte 34512

using stellt sicher, dass das zugewiesene Objekt nach dem using-Block ordnungsgemäß entsorgt wird, selbst wenn in dem Block eine unbehandelte Ausnahme auftritt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X