相對於VB而言,VB.NET中引入了很多特色。當中最吸引我的就是引入了結構化異常處理。
盡管VB.NET仍然支持OnError Goto類型的異常處理,可是這樣做並非非常好。相比而言,結構化異常處理更加靈活,使用更加方便。我們應該充分利用VB.NET提供的結構化異常處理。
在VB.NET結構中的異常處理分為3個語句塊。
(1)try塊負責錯誤代碼的捕獲
(2)catch進行錯誤的處理
(3)finally負責錯誤處理后的興許工作如:釋放對象、清理資源等的工作。
使用這些區塊的目的是同意執行Try模塊中被保護的代碼,對catch,對catch區塊中可能分不論什么錯誤做出反應。而且在隨后的Finally塊中還有清理代碼。不管Try代碼塊是否有發生錯誤,Finally塊的代碼都會被執行到,這樣能夠非常方便的保證分配的資源會被釋放,而且能夠方便地提供那些不論錯誤控制細節怎樣,都須要被執行的各種功能的函數。可是,Catch語句塊不一定執行,假設Try塊內的代碼沒有錯誤,沒有拋出異常的話,Catch語句塊中的代碼是不執行的。而是跳過Catch塊直接執行Finally塊中的清理工作。
反之假設遇到了異常Catch語句塊中的處理工作就要進行。
以下舉個實例:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim file As System.IO.FileStream, msg As String Try file = New System.IO.FileStream("D:\readme.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read) file.Close() Catch ex As Exception msg = String.Format("{0}ralsed exception :{1}", ex.Source, ex.Message) MessageBox.Show(msg, "My App", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally If Not file Is Nothing Then file.Close() End Try End Sub這個樣例是在 D盤找到一個readme.txt文檔。假設我們在D盤中沒有建立這個文檔,那么就會運行Catch語句,會彈出出錯的來源和原因:
假設我們在D盤建立一個readme.txt文檔。那么就不會有發生錯誤,那么不會運行Catch語句。跳到Finally中運行。
在如今,開發者經常忽視了組織有序。考慮周到的異常處理的重要性,經常導致用戶的不便和失敗。
我們將來假設要做合格的開發者,異常處理對我們來說是至關重要的。
它是.NET平台重要的安全機制,將錯誤代碼的接受和處理的進行了完美的分離。理清了編程者的思緒,也幫助代碼增強了可讀性,方便了維護者的閱讀和理解,並且還提供了處理程序執行時出現的不論什么意外或異常情況的方法。