1,system.exception 類---所有異常類的基類
message
readonly
string
指出異常的原因
data
readonly
idictionary
引用乙個鍵值對集合
source
r/wstring
包含異常的程式集名稱
stacktrace
rstring
包含異常之前呼叫所有方法和資訊
targetsite
rmethodbase
包含丟擲異常的方法
innerexception
rexception
如果當前異常時在處理乙個異常時丟擲的,則指出上個異常是什麼
可以使用exception.getbaseexception來遍歷異常鍊錶.
hresult
r/wint
com api 返回值維護.
1.1 exception.getbaseexception 方法用法
class secondlevelexception : exception}class thirdlevelexception : exception//使用message和innerexciption來初始化異常
}
建立測試方法:
2,自定義異常類及其使用方法:
定義乙個自定義的異常類
[serializable]public
sealed
class exception: exception, iserializable where texceptionargs:exceptionargs
}public exception(string message=null,exception innerexception = null) : this(null, message, innerexception)
public exception(texceptionargs args,string message=null,exception innerexception = null) : base(message, innerexception)
//這個構造器用於反序列化,由於類私有的,所以構造器是私有的.
[securitypermission(securityaction.linkdemand,flags=securitypermissionflag.serializationformatter)]//給該類保護
private exception(serializationinfo info,streamingcontext context):base(info,context)
[securitypermission(securityaction.linkdemand, flags = securitypermissionflag.serializationformatter)]
public
override
void getobjectdata(serializationinfo info,streamingcontext context)
public
override
string message
()", basemsg, m_args.message);}}
public
override
bool equals(object obj)
public
override
int gethashcode()
}
該異常類繼承了exception和iserializable.並且實現了類的序列化和反序列化
該類可以攜帶乙個引數類資訊.
[serializable]public
abstract
class exceptionargs
}}
3,建立自己的exceptionargs的派生類,用於攜帶異常資訊.
publicsealed
class diskfullexceptionargs : exceptionargs
public diskfullexceptionargs(string path)
public
override
string message => path ?? base.message;
}
4,使用方法:
publicstatic
void gocustomexception()
catch(exceptione)
", e.message);//呼叫類e.message
console.writeline("the exceptionargs message is ", e.args.message);//呼叫類e.args.message
}}
5,結果
the exception message is disk is full (c:\)the exceptionargs message is c:\
第二十章 異常和狀態管理
try中包含的 通長包含需要清理資源的 或者從異常中恢復,或者會丟擲異常的 catch包含異常恢復的 finally包含資源清理的 保證會執行的 如果內部的乙個catch沒有捕獲到異常,那麼會向外層就是呼叫方法的那一層查詢捕獲的 總是先執行內部所有的finally語句,由內而外,最後執行catch的...
clr via c 引數和屬性
1,可選引數和命名引數 private static void m ref int x int a 5 呼叫方法 m x ref a class program s dt guid x,s,dt,guid static void main string args 結果 x 9,s a,dt 0001...
中斷和異常管理
cpu通過中斷描述符表 idt 來處理中斷和異常,idt是記憶體中的一張線性表,cpu的idtr指向idt表,idt表項為門描述符,通過門描述符中的段寄存子和偏移量找到處理中斷的函式例程,門描述符主要有三種 記憶體布局如下 而windows統一處理軟體中斷和硬體中斷,定義了描述異常的結構excepe...