用慣了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 ...