Usingステートメント内で例外が発生しても、オブジェクトは破棄されますか?
私が尋ねている理由は、コードブロック全体を囲むか、内部のusingステートメント内で試行を行うかを決定しようとしているためです。特定の例外は、catchブロック内の設計によって再スローされていることに留意してください。
using (SPSite spSite = new SPSite(url))
{
// Get the Web
using (SPWeb spWeb = spSite.OpenWeb())
{
// Exception occurs here
}
}
はい、そうします。
using(SPWeb spWeb = spSite.OpenWeb())
{
// Some Code
}
に相当
{
SPWeb spWeb = spSite.OpenWeb();
try
{
// Some Code
}
finally
{
if (spWeb != null)
{
spWeb.Dispose();
}
}
}
この質問に答えた後、ブログに IDisposable and Using 構成に関する詳細な投稿を書きました。
はい。 using
ステートメントは、およそ次の構文に変換されます。
IDisposable x;
try
{
...
}
finally
{
x.Dispose();
}
はい、そうです。これは、try-finallyでコードをラップする(そして、finallyで破棄する)ようなものです。
using
ステートメントにより、完全で適切なdispose
パターンが生成されるため、答えは「はい」です。