2011-10-29 48 views
0

有沒有辦法在運行時改變代碼合同的行爲方式?如在運行期間前或後續conidtion失敗時,應用程序崩潰。有沒有一種方法,而不是崩潰,有一個MessageBox顯示?代碼合同錯誤

+0

這篇文章有些含糊;我看到你已經提到了C#作爲參考語言,你能否給我們一個代碼示例,以及實際操作與期望的操作?謝謝。 – Blaskovicz

回答

2

當合同失敗時,程序不會「崩潰」,而是拋出異常。 Contracts類可以讓你控制什麼樣的異常。

因此,您需要某種形式的異常處理,而不僅僅是合同。

話雖如此,失敗的合同通常足夠嚴重到終止申請。

+1

+1表示「失敗的合同通常嚴重到足以終止申請」。 @happyguy:如果您在驗證的每一處使用合約,您可能會錯誤地使用它。你應該確保你在將他們的價值傳遞給一個會根據合同拒絕他們的課程之前預先驗證你的價值。違反合同是例外情況,例外情況應該用於例外行爲。一個例子就是如何在打開文件之前(而且應該)檢查'File.Exists',以避免'FileNotFoundException'。 –

+3

@ MerlynMorgan-Graham - 你說得很好,但你的榜樣不是最好的。文件的存在(通常)不適用於方法合約,因爲文件的存在取決於程序控制之外的事情。也就是說,可以在File.Exists被調用的時間和嘗試打開文件的時間之間刪除或移動文件。這些東西(Eric Lippert稱之爲「外生例外」)通常最好使用普通的結構化異常處理機制來處理。 –

+1

(續)合同對於狀態已知的事情(如空值參考或按值參數的整數範圍檢查)是最好的,不會隨意更改。 –