2008-11-13 62 views
2

我構建了一個UserControl,我不知道如何處理異常,控件本身不是很複雜,用戶從磁盤選擇了一個映像,以便他們可以授權它,不知道控件如何使用,所以如果我使用MessageBox,我可能會阻止應用程序,如果我只是重新扔它,我可能會崩潰。在UserControl中處理異常的正確方法

在此先感謝。

胡安·薩穆迪奧

回答

3

這是構建庫的開發者面臨的一個常見問題。如果它是一個預期的錯誤(你的控件不應該拋出一個異常而是優雅地處理這個錯誤)或者一個意外的異常情況(你的控件必須儘快拋出一個異常),試着去除錯誤並決定剩下的錯誤情況。

您可能還會看看Design By Contract,這是一種聲明所需先決條件和保證後置條件的方法。這可能聽起來很有道理,但它會導致更健壯的代碼。

更新: 一個很好的介紹是http://se.ethz.ch/~meyer/publications/computer/contract.pdf

問候, tamberg

+0

看起來很有趣,我會看看,謝謝。 – 2008-11-13 17:20:47

0

未處理的異常,絕對應該拋出,以便使用你控制的人可以看到什麼是錯的。

+0

是的,這是真的,但IOException怎麼樣,我可以捕捉到,但我該怎麼處理它,我通過MessageBox或一個IE瀏覽器的「黃色欄」通知錯誤。或者只是默默地處理它。 – 2008-11-13 17:16:34

0

只處理,你知道的,知道是做什麼用的例外。不要打擾通用處理程序,如MessageBox。只要讓它傳播到有更多上下文來診斷錯誤的應用程序。他們有責任捕獲任何異常,以便應用程序不會崩潰。在發生異常的情況下,他們無法做任何事情,因爲它與控件的內部結構有關,所以應該自己處理,如果部分是用戶的錯誤,則用例外消息說明缺少的內容,並將原始內容通過InnerException屬性可用的異常。

0

除了上述內容之外,我還想提一下,您應該嘗試讓您的控件通過檢查不同的對象狀態和「預防」來避免異常,而不是允許引發異常。

養心神記住,拋出異常是一個相當昂貴的過程和(我已經在過去被告知)異常應該留給真正的「例外」意外情況......

順祝商祺,
Frank