実行中にコードコントラクトが動作する方法を変更する方法はありますか?実行中に前または後に失敗すると、アプリケーションがクラッシュします。クラッシュする代わりに、MessageBoxを表示させる方法がありますか?コード契約エラー
コード契約エラー
答えて
契約が失敗した場合、プログラムはクラッシュしませんが、例外がスローされます。 Contractsクラスを使用すると、どのような種類の例外を制御することができます。
したがって、契約のためだけでなく、例外処理の形式が必要です。
と言っていますが、失敗している契約は、通常、アプリケーションを終了するのに十分なほど深刻です。
+1 "失敗した契約は通常、アプリケーションを終了するのに十分なほど深刻です"。 @happyguy:あなたの検証のすべてのビットに対して契約を使用している場合は、それを間違って使用している可能性があります。契約に基づいて拒否するクラスに値を渡す前に、値を事前に検証するようにしてください。契約違反は例外であり、例外的な動作には例外を使用する必要があります。例として、 'FileNotFoundException'を避けるために、ファイルを開く前に' File.Exists'をチェックする方法があります。 –
@ MerlynMorgan-Graham - あなたは優れた点を作っていますが、あなたの例は最良ではありません。ファイルの存在は、(通常)メソッド契約に適切なものではない。なぜなら、ファイルの存在はプログラムの制御外のものに依存するからである。つまり、 'File.Exists'が呼び出された時点とファイルを開く時点との間で、ファイルを削除または移動することができます。そのようなもの(Eric Lippertによる "外因性例外"と呼ばれる)は通常、通常の構造化された例外処理メカニズムで最もよく扱われます。 –
(続き)契約は、状態が任意に変更されないことがわかっているもの(ヌル参照やバイナリパラメータの整数範囲チェックなど)に最適です。 –
この投稿は多少曖昧です。私は参照言語としてC#を参照してください参照してください、あなたは私たちにコードのサンプルと実際のアクション対望ましいアクションを与えることができますか?ありがとう。 – Blaskovicz