執行過程
public void method(Action action){ //2.method執行中 try { action(); //3.調用委托 string x = "5"; //如果action執行時出現了error,但是內部有catch機制并且沒有繼續throw出來,那么這里"會"執行 } catch (Exception ex) { //8.捕獲error string x = ex.Message; //如果action執行時出現了error,但是內部有catch機制并且沒有繼續throw出來,那么這里"不會"執行 }}PRotected void Page_Load(object sender, EventArgs e){ try { //1.調用method函數,并且傳入委托 method(delegate() { //4.執行委托函數 try { throw new Exception("x"); //5.error 出現 } catch (Exception ex) { string x = ex.Message; //6.捕獲error throw ex; //7.把error傳遞下去 (如果沒有把error傳遞,那么外部的catch就不會觸發了) } }); string xyx = "z"; //9.因為method函數中的catch沒有在throw所以會執行這里 } catch (Exception ex) { string x = ex.Message; } finally { //10 finally 一定會執行! }}重點 catch有沒有繼續throw, finally一定會執行
自定義catch
只要一個類繼承了System.Exception 它就可以作為一個catch , 可以被throw
一個try 可以有多個 catch(不同的Class處理)
簡單的說 throw new someClass 就是丟一個對象,new someClass()可以像普通的實例化一樣,寫一些初始化等等。
catch 捕獲到的就是這個對象,就是一般的對象咯,一樣可以調用屬性或者方法等等。
public class MyEx : System.Exception{ public MyEx() : base() { } public MyEx(string message, Exception innerException) : base(message, innerException) { } public MyEx(Int64 number) //初始化 { this.number = number; } public Int64 number { get; set; }} protected void Page_Load(object sender, EventArgs e){ try { throw new MyEx(5); } catch (MyEx ex) { Int64 z = ex.number; //調用公有屬性 } catch (Exception ex) { string x = ex.Message; } finally { //10 finally 一定會執行! }}新聞熱點
疑難解答