clr via c 異常和狀態管理

2022-06-16 16:39:12 字數 2653 閱讀 1279

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的派生類,用於攜帶異常資訊.

public

sealed

class diskfullexceptionargs : exceptionargs

public diskfullexceptionargs(string path)

public

override

string message => path ?? base.message;

}

4,使用方法:

public

static

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...