c 框架筆記 異常

2021-06-01 18:09:39 字數 2661 閱讀 1360

異常

在異常發生時,將自上而下地搜尋匹配的catch快,因此,我們應將較具體的異常放在上面,即最常用的異常型別應首先出現,

接著是這些型別的基礎型別(如果存在的話),最後是system.exception異常。

例子:private void somemethod()

catch(invalidoperationexception)

catch(ioexception)

catch    //catch(exception)

finally

}例項:

private void readdata(string pathname)

catch(ioexception)

finally}}

2、定義自己的異常類

定義異常類是的注意事項:

1、定義乙個派生自system.exception的自己的異常類是,異常類的語義一定要精確匹配,包要丟擲system.exception的異常。

2、計畫為異常型別的構造器傳遞什麼樣的字串訊息?字串要包含為何無法完成任務

例項:假設我們頂乙個方法,該方法接收物件的引用,而物件的型別必須實現iformattable介面和icomparable介面:

internal sealed class  sometype

//操作物件o...}}

missinginte***ceeception是自定義的乙個異常類,在定義異常類時,我們可以從sytem.exception繼承,也可以從他具體的子類

繼承,如果定義的異常類不作為其他類的父類,應該將該型別標記為sealed。

exception基礎型別定義了4個標準構造器:

1、乙個公共的無參構造器(預設),它建立乙個異常型別的例項,並將所有的字段和屬性設為預設值。

2、乙個公共的含有連個引數的構造器(引數的型別為string),他建立了乙個異常型別的實力,並設定乙個指定的訊息。

3、乙個公共的含有兩個引數的構造器(其中乙個引數的型別string,另乙個引數為派生自exception型別的例項),他建立了乙個異常型別的實力,並設定乙個指定的訊息和乙個內部異常。

4、乙個受保護的含有兩個引數的構造器(其中乙個引數為serializationinfo,另乙個引數為streamingcontext),他反序列化派生自exception物件的例項。注意,如果派生自exception的型別是密封的,那麼這個方法的可訪問性應為private,並且確保該構造器在基類中條用相同的構造器,一邊基類的字段被真正地反序列化。

要使乙個新定義的異常序列化,需要練個步驟:首先,要對型別應用乙個[serializable]自定義屬性;

接著,還要實現iseriallizable介面及其getobjiectdata方法(該方法用喲乙個securitypermission屬性)

和乙個構造器,兩者都有連個引數,即serializationinfo和streamingcontext.

例項**:

using system;

using system.text;

using system.runtime.serialization;

using system.security.permission;

//允許diskfullexception的例項被序列化

[serialiable]

public sealed class diskfullexception : exception, iserializable

}//為了包含字段,重寫屬性message(如果已經設定的話)

public override string message}}

//三個公共構造器方法

public diskfullexception() : base() {}

public diskfullexception(string message) : base(message) {}

public diskfullexception(string message, exception innerexception) : base(message, innerexception) {}

//定義乙個額外的構造器,設定新定義的字段

public diskfullexception(string message, string diskpath) : this(message)

public diskfullexception(string message, string diskpath, exception innerexception)

: this (message, innerexception)

//定義乙個反序列化的構造器,因為雷士密封的,所以該構造器是私有的;否則,該構造器可以是受保護的

private diskfullexception(serializationinfo info, streamingcontext context) : base(into, context)

//定義序列化方法:securitypermission確保呼叫者後的物件的內部狀態

[securitypermission(securityaction.demand, serializationformatter = true)]

public override void getobjectdata(serializationinfo info, streamingcontext context)

}

C 異常筆記

1.通常異常都是捕捉,然後處理或拋 try catch exception ex 可優化為 try catch 2.捕捉異常不處理可不加catch,這樣能提公升效能 try finally 3.異常捕捉錯誤的行數 int index ex.stacktrace.indexof 行號 if index...

C 異常學習筆記

vc 中的異常捕獲的規則 可以捕獲的異常有以下三種情況 1.必須嚴格遵守匹配資料型別 2.異常處理的資料型別是公有類,拋擲的異常的資料型別是派生類。3.異常處理的資料型別是指向公有基類的指標,拋擲異常的資料型別是指向派生類的執針 對於派生層次結構的異常處理,catch 塊組的順序是重要的。因為 ca...

c 異常學習筆記

1.捕獲異常 try catch結構 2.收尾工作 try catch finally結構 3.丟擲異常 throw語句 try catch finally結構 class program denominator,result catch dividebyzeroexception e 分母為0的異...