try-finally 說明

大家都知道在try-finally最後都會去run finally的程式區塊,那如果在try程式區塊中寫Exit Sub(vb)呢?

大家都知道在try-finally最後都會去run finally的程式區塊,那如果在try程式區塊中寫Exit Sub(vb)呢? 還會再去run finally的程式區塊嗎? 請看以下的說明,

case1

case2


{
    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:從零開始的軟體開發生活

請大家繼續支持 ^_^