2
using(YourType yourObject = new YourType())
{
   //Treatment on you object 
   //Exception occurs here
}

このように書くと、ガベージ コレクターは自動的にオブジェクトを破棄しますが、この内部で例外が発生した場合、ガベージ コレクターはまだオブジェクトを破棄しますか、それとも何かを書かなければなりません。

物事を明確にするために、さまざまな.netフレームワークでの処理について説明してください。

4

2 に答える 2

9

はい、using ブロックは引き続きDispose例外を呼び出します。MSDN ドキュメントを参照してください。

using ステートメントを使用すると、オブジェクトのメソッドを呼び出しているときに例外が発生した場合でも、Dispose が確実に呼び出されます。

また、Avoiding Problems with the Using Statementという便利な記事もあります。

于 2012-08-01T13:42:22.150 に答える
1

MSDN ドキュメントから

using ステートメントを使用すると、オブジェクトのメソッドを呼び出しているときに例外が発生した場合でも、Dispose が確実に呼び出されます。オブジェクトを try ブロック内に配置してから、finally ブロック内で Dispose を呼び出すことによって、同じ結果を得ることができます。実際、これは using ステートメントがコンパイラによってどのように変換されるかです。

using (var object = new Object())
{
    object.DoSomething();
}

等しい:

var object = new Object();
try
{
     object.DoSomething();
}
finally
{
    object.Dispose();
}
于 2012-08-01T13:50:24.327 に答える