15

Spec# の素晴らしさに影響された静的クラスについて読んだ後、System.Diagnostics.Contracts.Contract私は感激し、すぐにコードにContract.Requires()andの呼び出しを追加し始めましContract.Ensures()た。

私のコードが非常に素晴らしく、バグがないため、それらの呼び出しが実際に何かを実行したかどうかを確認することが最近まで行われなかったのだと思います。バグがすり抜けて、これらの呼び出しが何もしないことに気付きました! 条件に違反したときに少なくとも例外をスローすると思っていましたが、そのような運はありませんでした。

何か不足していますか?一体何がポイントなのか誰か知っていますか?

4

3 に答える 3

17

MSDN のコントラクト クラス ページから:

コントラクトの実行時の強制を挿入するには、バイナリ リライターを使用する必要があります。それ以外の場合、Contract.Ensures メソッドなどのコントラクトは静的にしかテストできず、コントラクトに違反しても実行時に例外をスローしません。バイナリ リライター CCRewrite は、MSDN DevLabs Web サイトの Code Contracts からダウンロードできます。CCRewrite には Visual Studio アドインが付属しており、プロジェクトの [プロパティ] ページからランタイム コントラクトの適用を有効にすることができます。バイナリ リライターと Visual Studio アドインは、Visual Studio 2010 または Windows SDK には同梱されていません。

于 2010-05-21T16:22:18.377 に答える
2

JSBangs の回答を拡張します。

ここで「Perform Runtime Contract Checking」ボックスをチェックする必要があります。

ここに画像の説明を入力

(「静的チェック>静的コントラクトチェックを実行する」ボックスもチェックしました)

于 2013-09-24T21:13:51.483 に答える
0

呼び出しでエラーをスローする場合.Requiresは、プロジェクト設定でオプションを設定するか、.Requires<T>呼び出しを使用する必要があります

于 2010-05-21T16:23:02.883 に答える