大家都知道在try-finally最後都會去run finally的程式區塊,那如果在try程式區塊中寫Exit Sub(vb)呢?
大家都知道在try-finally最後都會去run finally的程式區塊,那如果在try程式區塊中寫Exit Sub(vb)呢? 還會再去run finally的程式區塊嗎? 請看以下的說明,
{
try
{
try
{
if (checkBox1.Checked)
{
throw new Exception("checkBox1 Throw Exception!");
}
else
{
MessageBox.Show("exit sub");
return;
//goto EndOfMethod;
}
}
catch
{
MessageBox.Show("Exception 1");
}
finally
{
MessageBox.Show("Finally");
}
}
catch (Exception ex)
{
MessageBox.Show("Exception 2" + ex.ToString());
}
EndOfMethod:
MessageBox.Show("End of method");
}
以上的Code,
如果是走exit sub(return)的話,就會跑到finally區塊中,才會離開這個method(所以不會Run到MessageBox.Show("End of method");)。
如果將return mark起來,使用goto的話,也會先跑到finally區塊中,才會再去Run MessageBox.Show("End of method");
所以在try-finally之中,不管是要去那裡,都一定會run finally的程式區塊的,即使你使用goto也是一樣哦!
所以如果你要關閉DB的connection,直接在finally之中去close而不要以為下了return(exit sub)就馬上會離開哦!
參考資料:try-finally
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^