Ja, Dispose
wird aufgerufen. Es wird aufgerufen, sobald die Ausführung den Gültigkeitsbereich des Blocks using
verlässt, unabhängig davon, was es bedeutet, den Block zu verlassen, sei es das Ende der Ausführung des Blocks, eine return
-Anweisung oder eine Ausnahme.
Wie @Noldorin Punkte korrekt aus, ein using
Block in Code kompiliert wird in try
/finally
, mit Dispose
im finally
Block genannt wird. Zum Beispiel der folgende Code:
using(MemoryStream ms = new MemoryStream())
{
//code
return 0;
}
wirksam wird:
MemoryStream ms = new MemoryStream();
try
{
// code
return 0;
}
finally
{
ms.Dispose();
}
Also, weil finally
garantiert ausgeführt werden, nachdem die try
Blockausführung, unabhängig von ihrer Ausführungspfad beendet ist, wird Dispose
garantiert sein genannt, egal was.
Weitere Informationen finden Sie unter this MSDN article.
Nachtrag:
Nur eine wenig Einschränkung hinzuzufügen: weil Dispose
garantiert genannt werden, ist es fast immer eine gute Idee, um sicherzustellen, dass Dispose
nie eine Ausnahme auslöst, wenn Sie IDisposable
implementieren. Leider gibt es einige Klassen in der Core-Bibliothek, die tun unter bestimmten Umständen zu werfen, wenn Dispose
aufgerufen wird - ich freue mich auf Sie, WCF-Service-Referenz/Client-Proxy! - und wenn das passiert, kann es sehr schwierig sein, die ursprüngliche Ausnahme aufzuspüren, wenn Dispose
während eines Ausnahme-Stack-Abwicklers aufgerufen wurde, da die ursprüngliche Ausnahme zugunsten der neuen Ausnahme, die durch den Aufruf Dispose
generiert wurde, geschluckt wird. Es kann ärgerlich frustrierend sein. Oder ist das frustrierend verrückt? Einer der Beiden. Vielleicht beide.
@JonH: Finden Sie die genaues Duplikat, dann stimmen Sie bitte in diesem Fall ab. – Noldorin
@Noldorin: Ich habe nach einem Betrogenen gesucht, weil ich gedacht habe, dass es vorher gefragt wurde, aber ich konnte keinen finden. Ich denke, es gibt immer noch einfache Fragen. :) – Randolpho
@JonH und @Noldorin - Duplikate wären dargestellt worden, als die Frage gestellt wurde, sie sucht nach "ähnlichen Fragen", eine Eigenschaft, die Leute anscheinend nicht genug benutzen. –