2013-06-28 9 views
19

Liefert die using Anweisung immer das Objekt, auch wenn es eine Rückgabe oder eine Ausnahme gibt? D.h .:Liefert "using" -Anweisung immer das Objekt?

using (var myClassInstance = new MyClass()) 
{ 
    // ... 
    return; 
} 

oder

using (var myClassInstance = new MyClass()) 
{ 
    // ... 
    throw new UnexplainedAndAnnoyingException(); 
} 

Antwort

29

Ja, das ist der springende Punkt. Es kompiliert bis:

SomeDisposableType obj = new SomeDisposableType(); 
try 
{ 
    // use obj 
} 
finally 
{ 
    if (obj != null) 
     ((IDisposable)obj).Dispose(); 
} 

Seien Sie vorsichtig in Bezug auf Ihre Terminologie hier; Das Objekt selbst wird nicht freigegeben. Die Methode Dispose() wird aufgerufen, und normalerweise werden nicht verwaltete Ressourcen freigegeben.

10

Wenn das Objekt implementiert IDisposable, wird es aufgerufen werden.

Von using Statement (C# Reference)

Definiert einen Bereich, außerhalb dessen ein Objekt oder Objekte entsorgt werden.

Mit der using-Anweisung kann der Programmierer angeben, wann Objekte, die Ressourcen verwenden, sie freigeben sollen. Das Objekt, das für die Verwendung der Anweisung bereitgestellt wird, muss die IDisposable-Schnittstelle implementieren. Diese Schnittstelle stellt die Dispose-Methode bereit, die die -Ressourcen des Objekts freigeben sollte.

+0

+1 für die Feststellung, dass das Objekt IDisposable implementieren muss. – Tim

Verwandte Themen