C#異常處理

普陀網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
正如許多OOP語言一樣,C#也能處理可遇見的,反常條件(丟失網(wǎng)絡(luò)連接,文件丟失)下的異常。當(dāng)應(yīng)用程序遇到異常情況,它將“拋”出一個異常,并終止當(dāng)前方法,直到發(fā)現(xiàn)一個異常處理,那個堆棧才會清空。
這意味著如果當(dāng)前運行方法沒有處理異常,那么將終止當(dāng)前方法,并調(diào)用方法,這樣會得到一個處理異常的機(jī)會。如果沒有調(diào)用方法處理它,那么該異常最終會被CLR處理,它將終止程序
可以使用try/catch塊來檢測具有潛在危險的代碼,并使用操作系統(tǒng)或者其他代碼捕捉任何異常目標(biāo)。Catch塊用來實現(xiàn)異常處理,它包含一個執(zhí)行異常時間的代碼塊,理想情況下,如果捕捉并處理了異常,那么應(yīng)用程序可以修復(fù)這個問題并繼續(xù)運行下去。及時應(yīng)用程序不能繼續(xù)運行,也可以捕捉這些異常,并顯示有意義的錯誤信息,使應(yīng)用程序安全種植。同時,你也有機(jī)會將這些錯誤書寫入日志中。
如果在方法中有一段代碼無論是否碰到以外都必須運行(例如,釋放已經(jīng)分配的資源,關(guān)閉一個打開的文件)那么可以吧代碼放在finally塊中。這樣甚至在存在異常的代碼中也能保證其運行。
一、C#異常的發(fā)生
公共語言運行庫支持基于異常對象和受保護(hù)代碼塊概念的異常處理模型.即當(dāng)運行庫在異常發(fā)生時,運行庫就會創(chuàng)建一個表示該異常的對象.當(dāng)然你也可以通過從適當(dāng)?shù)幕惓E缮悂韯?chuàng)建自己的異常類.
當(dāng)發(fā)生非致命應(yīng)用程序錯誤時,就會引發(fā)ApplicationException 類及其派生類類型的異常.
我們可以通過使用Throw語句顯式引發(fā)異常. 也可以使用Throw語句再次引發(fā)已經(jīng)捕獲的異常. 好的編碼做法是向再次引發(fā)的異常添加信息以在調(diào)試時提供更多信息. 而異常的處理方法,在所有使用運行庫的語言都以相似的方式處理異常. 即大多數(shù)語言都使用try/catch/finally形式的結(jié)構(gòu)化異常處理.
二、C#使用 try/catch 塊捕捉異常
公共語言運行庫提供一種異常處理模型,該模型基于對象形式的異常表示形式, 即將程序代碼和異常處理代碼分到try 塊和 catch 塊中.可以有一個或多個 catch塊,每個塊都設(shè)計為處理一種特定類型的異常,或者將一個塊設(shè)計為捕捉比其他塊更具體的異常. 如果要處理在應(yīng)用程序在執(zhí)行期間某代碼塊發(fā)生的異常,則必須先該代碼塊放置在 try 塊中. (try 語句中的代碼是try 塊), 并將處理由try 塊引發(fā)的異常的應(yīng)用程序代碼放在 catch語句中,稱為catch塊. 零個或多個catch塊與一個 try 塊相關(guān)聯(lián),每個 catch塊包含一個確定該塊能夠處理的異常類型的類型篩選器.在try 塊中出現(xiàn)異常時,系統(tǒng)按所關(guān)聯(lián) catch塊在應(yīng)用程序代碼中出現(xiàn)的順序搜索它們, 直到定位到處理該異常的catch塊為止. 如果某catch塊的類型篩選器指定了異常類型T或任何派生由異常類型T派生的異常類型,的則該catch塊處理 T類型及其派生類型的異常. 系統(tǒng)在找到第一個處理該異常的catch 塊后即停止搜索.因此,正如本節(jié)后面的示例所演示的那樣,在應(yīng)用程序代碼中處理某類型異常的 catch塊必須在處理其基類型的 catch塊之前指定,所以通常處理 System.Exception 的catch 塊最后指定. 如果與try塊相關(guān)聯(lián)的所有 catch塊均不處理該異常,且當(dāng)前 try 塊嵌套在其他 try 塊中, 則搜索與上一級 try塊相關(guān)聯(lián)的 catch 塊. 如果仍然沒有找到用于該異常的catch 塊, 則將該異常沿調(diào)用堆棧向上傳遞,搜索上一個堆棧幀(即當(dāng)前方法(或函數(shù))的主調(diào)方法(或函數(shù))) 來查找處理該異常的catch 塊,并一直查找,直到該異常得到處理或調(diào)用堆棧中沒有更多的幀為止. 如果到達(dá)調(diào)用堆棧頂部卻沒有找到處理該異常的catch塊,則由默認(rèn)的異常處理程序處理該異常, 然后應(yīng)用程序終止.
細(xì)節(jié):當(dāng)發(fā)生異常時,該異常會沿堆棧向上傳遞,并查找合適catch塊. 由前面看出catch語句的順序很重要,應(yīng)該將針對處理特定異常的 catch塊放在處理常規(guī)異常(一般指定某種異常的基類) catch塊的前面,否則編譯器可能會發(fā)出錯誤. catch塊的查找方法是將異常的類型與 catch塊中指定的異常名稱進(jìn)行匹配. 如果沒有找到特定的catch塊,則由存在的常規(guī) catch塊捕捉異常.如果也沒有處理常規(guī)異常的 catch塊,公共語言運行庫捕捉catch 塊沒有捕捉的異常.根據(jù)運行庫的配置,或者出現(xiàn)一個調(diào)試對話框, 或者程序停止執(zhí)行并出現(xiàn)一個包含異常信息的對話框.
三、C#異常處理辦法和分類
1、c#中所有的異常處理都被視為類,所有異常都是由System.Exception所派生的。
2、C#中處理錯誤異常管理的關(guān)鍵字指令有四個:try、catch、throw、finally,有這四個關(guān)鍵字所編寫的異常處理功能非常的強(qiáng)大與方便。
3、異常處理的語法:try{有可能產(chǎn)生錯誤的代碼}catch(異常處理聲明(聲明此catch區(qū)段要捕獲哪一種類型的異常錯誤,可以不用聲明,這樣子便會讓catch去捕獲任意類型的異常錯誤)){異常處理程序代碼(當(dāng)catch捕獲到異常錯誤后,所采取對應(yīng)的程序代碼)}
注意:利用catch來捕獲try-catch中產(chǎn)生的異常錯誤,可以建立多個catch區(qū)段以捕獲不同類型的異常錯誤。
3、C#中常見異常類:
類 說明
OutOfMemoryException 當(dāng)利用new關(guān)鍵字去初始化分配一塊內(nèi)存失敗時
StackOverflowException 當(dāng)執(zhí)行程序有利用到堆棧資源時(通常是執(zhí)行Recursion或太多的循環(huán)),將堆棧資源耗盡時
NullReferenceException 當(dāng)要利用Reference對象時,卻是NullReference
TypeInitializationException 若靜態(tài)對象發(fā)生錯誤,但又缺乏catch區(qū)段去處理與對應(yīng)時
ArrayTypeMismatchException 當(dāng)存入數(shù)據(jù)與數(shù)組中數(shù)據(jù)類型不同時
IndexOutOfRangeException 當(dāng)超過數(shù)組的限定范圍時
MulticastNotSupportedException 當(dāng)要合并兩個委派對象失敗時
ArithmeticException 一般在運算失敗時,這包含了DivideByzeroException與OverflowException兩種異常
DivideByzeroException 當(dāng)使用除法運算時,分母為0所造成的錯誤時
OverflowException 當(dāng)運算后超過數(shù)據(jù)類型的合法范圍時
截獲到你再throw拋出異常,必然是報錯程序退出。
在Catch里面要么不拋出異常,要么根據(jù)情況處理
throw在自己寫類時很有用處
比如調(diào)用StreamReader時,如果文件不存在,你的程序就會被IOException的異常打斷,原因就是streamreader的一個過程throw了一個ioexception,說明它是用來丟異常的。
如果要獲取這個異常,可以用try語句
try
可能有異常產(chǎn)生的代碼
Catch ex As Exception
用ex代表異常,并對異常進(jìn)行處理
End try
Err.Raise 錯誤代碼
例如
Err.Raise 6
導(dǎo)致6號錯誤(溢出)
D
*******************
A肯定是正確的
B這是標(biāo)準(zhǔn)的處理方式
C用戶可以從異常類派生自己的子類
分享題目:vb.net的重拋異常 vb拋出異常
標(biāo)題網(wǎng)址:http://chinadenli.net/article8/hephop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、建站公司、域名注冊、營銷型網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)