除了Exception,還能throw什麼

2021-09-05 21:41:27 字數 1432 閱讀 3779

用慣了c#,vb.net的人,可能很習慣用下面的格式來捕獲所有的異常:

trycatch

(system.exception ex) 

這條語句能捕獲所有種類的異常嗎?顯然,這條語句捕獲的是system.exception,以及所有繼承自它的類。

也就是說,如果你丟擲了乙個不是繼承自system.exception的物件,該語句就無法捕獲。

丟擲不是異常的異常……這種不相容cls的事情,可能嗎?

答案是,在1.x當中是可能的。

在c++當中,我們可以用

throw "error!"

這樣的語句丟擲乙個字串;

在il當中,我們可以用下面的方式,丟擲任意形式的異常:

.assembly throwerlib 

.class

public

thrower }

所以,在.net 1.x當中,經常使用下面這種最保險的方式:

trycatch

(system.exception ex)

catch

同時,為了保證和1.x版本的相容性,.net 2.0提供了runtimecompatibilityattribute類,指定clr不要對異常進行包裝:

[assembly:system.runtime.compilerservices.runtimecompatibility(wrapnonexceptionthrows 

=false)]

附:測試用**(執行於.net 2.0)

1,丟擲字串異常的il**,用ilasm /dll編譯 //

throwerlib.il

.assembly throwerlib 

.class

public

thrower 

.method 

static

public

void

throwstring( ) }

2,測試用c#**,要新增對上面的dll的引用

[assembly: system.runtime.compilerservices.runtimecompatibility(wrapnonexceptionthrows 

=false

)]namespace

throwerexample

catch

(system.exception ex)

catch

trycatch

(system.exception ex)

catch }

}}執行結果是,第乙個異常將被

catch(system.exception ex){}捕獲;第二個異常由於

catch(system.exception ex){}無法捕獲,將落到

catch{}中。

如果把第一行的屬性去掉,編譯時將出現下面的警告:

選offer,除了錢,還能比這些!

所謂擇業近視就是只顧眼前利益,忽視長遠利益,最終導致職業 選擇失誤,事業停滯甚至倒退。此類情況不僅限於上班族,高考時候志願的盲目跟風也屬此類。首先,每個人都應該有乙個明確的中期的職業目標 今後的3年裡我希望實現怎樣的成就,達到什麼樣的高度?做過商業計畫的人都知道,如果沒有目標,無法合理規劃資源,戰略...

北大除了「啃老」還能「啃」什麼

王學進 北大除了 啃老 還能 啃 什麼 近日,北大和耶魯大學的校園宣傳片因風格迥異引起熱議,部分認為北大宣傳片 拍攝跑偏 成了風景名勝片,而耶魯宣傳片更關注人。對此,拍攝宣傳片的北大藝術學院副教授陳宇稱,北大宣傳片旨在反映中國文人薪火相傳的精神氣質,與耶魯大學的招生宣傳不同,兩者沒有可比性。2月 1...

吉他譜 除了愛你還能愛誰

除了愛你還能愛誰 c fm c f大7 大雨過後 霓虹的世界 半片土司 冷掉的咖啡 dm em dm7 g7 熱鬧的街 烤香腸的香味 想起遠方你的夜 c fm c f大7 也許流浪是我的事業 在你心中我沒有地位 dm em f g7 拿起guitar唱不出的心碎 你忘了你的誓約 am am f c ...