問題タブ [code-contracts]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C#:コードコントラクトと通常のパラメーターの検証
次の2つのコードについて考えてみます。
と
私は個人的に最初のバージョンを好みます。コードがはるかに明確で小さく、コントラクトを簡単にオフにできるからです。ただし、不利な点は、Visual Studio Code Analysisが、パラメーター値のnullをチェックする必要があると非難し、コンストラクターのコントラクトが、正規表現によって分と時間が指定された境界内にあることを確認しないことです。
そのため、多くの間違った警告が表示され、RegEx検証以外のFormatExceptionsをスローせずに、コントラクトを使用して文字列値を検証する方法がわかりません。
コードコントラクトを使用して、これと同等の状況をどのように解決するかについての提案はありますか?
c# - 書き換え中の CodeContracts メタデータ エラー
大規模なデスクトップ アプリケーション プロジェクトで .NET 3.5 のコード コントラクトを使用しようとしています。このプロジェクトには、古いマネージ C++ 構文で記述された混合モードの C++ DLL 依存関係もあります。
実際のソリューションは少なくとも 20 のプロジェクトで構成されていますが、A、B、C、および D プロジェクトと、混合モードの M プロジェクトのみがあると仮定します。C は A、B、および M に依存します。A、B、および C はすべてランタイム チェックを実行するように構成されており、コードの書き換えはうまく機能します。ここで、D と呼ばれる上位レベルのアセンブリの 1 つにいくつかのコントラクトを追加したいと考えました。D は、他のすべての A、B、C、および M にも依存します。D のコードの書き換えが失敗し、次のメッセージが表示されます (名前を変更しました)。
M に関するメッセージなので、混合モードの C++ DLL に問題があると思います。ただし、C アセンブリ自体は、M も参照しながら、コードを正常に書き直すことができます。
また、同じソリューション内の他の上位レベルのアセンブリで試してみたので、問題は D アセンブリに直接あるわけではないと思います.C を参照している場合、コード コントラクト ツールでそれらを書き換えることはできません。
私が使用しているバージョンは 1.2.21023.14 です
CodeContracts MSDN フォーラムでもこの質問をしましたが、まだ回答が得られていないので、ここで試してみようと思いました。これに関連する回避策やアイデアに興味があります。
.net - コードコントラクト:ジェネリックインターフェイスのコントラクトクラスを提供するにはどうすればよいですか?
コードコントラクトを使用して、このジェネリックインターフェイスのコントラクトを指定したいと思います。
ドキュメントにはContractClass
、インターフェイスのコントラクトを指定するときに属性を使用するように記載されています。ただし、コンパイラはこれについて文句を言います。
タイプパラメータを属性と一緒に使用できないようです。
ジェネリックインターフェイスのコントラクトを作成するにはどうすればよいですか?または、これはコードコントラクトでは不可能ですか?
c# - コード コントラクト: フィールド/プロパティの値が変更されていないことを事後条件で述べるにはどうすればよいですか?
私が達成したいことをコード例で示すのが最善ですか?
(もちろん、渡された文字列はContract.Ensures()
、実際の事後条件式の単なるプレースホルダーです。)
これどうやってするの?ここで役に立ちContract.OldValue<>()
ますか?
c# - VisualStudio2010でコードコントラクトを機能させる
私は次のコードを持っています:
デバッグモードで実行していますが、最後の行で何らかのエラーが発生するはずです
とはいえ、何らかの理由でそうではありません。Contract.Requires()呼び出しを無視しているようです。コードコントラクトを使用しようとするときに何かを設定する必要がありますか?
Visual Studio2010RCを使用しています。
ありがとう
c# - Visual Studio 2010ProRCでのコードコントラクトのプロパティ
したがって、VisualStudio2010のプロパティに[コードコントラクト]タブがあるはずです。どこにも見つかりません。たぶんそれは私のVisualStudioのインストールに問題がありますか?RCバージョンを実行しています。
これは私が持っているものです:
代替テキストhttp://img192.imageshack.us/img192/5928/lcmitpm2aur5e4uiabdtofw.png
誰が何が間違っているのか知っていますか?多分私は間違った場所を探していますか?
ありがとう
.net - インターフェイスとのコードコントラクト:「メソッドの呼び出しはスキップされました。メソッドは条件付きであるため、コンパイラはメソッドの呼び出しを生成します...[...]」
こんばんは、
Microsoft.Contracts(最新バージョン)を試してみて、サンプルインターフェイスの上にプラグインすると、次のようになります。
ここで、2つのContract.Ensures(...)が「メソッド呼び出しがスキップされました。メソッドが条件付きであるか、実装されていない部分的なメソッドであるため、コンパイラーはメソッド呼び出しを生成します」というツールチップで視覚的に「ぼかし」 、実際にはCodeContracts出力はそれらをカウント/表示しません...私はここで何が欠けていて間違っているのですか?
-J
visual-studio - コード コントラクトの起動と実行
VS2010 と .NET 4.0 では、コード (例: cr、crr) にコントラクトを追加するためのショートカットが Intellisense に表示されますが、タブでこれらを追加すると、コード (Contract.Requires など) に有効なアセンブリがないため、インテリセンスがない(基本的に型が見つからない)。
コード コントラクトを使用して起動および実行するにはどうすればよいですか?
編集: System.Diagnostics.Contracts にすべてのメソッドが存在しますが、全体で属性を使用すると思いましたか? また、利用可能なコントラクト用のさまざまな .dll が多数あります。
ありがとう
c# - コード コントラクト: メソッドを委任する際に、Contract.Requires(...) ステートメントを重複して指定する必要がありますか?
将来の開発のために新しい .NET 4 Code Contracts機能を使用するつもりです。Contract.Requires(...)
これは、一連のメソッドで同等のステートメントを重複して指定する必要があるかどうか疑問に思いました。
コード例は千の言葉に値すると思います。
実行時チェックの場合、最終的には常に要件チェックにヒットし、失敗するとエラーが発生するため、それほど重要ではありません。
しかし、ここで 2 番目のオーバーロードでコントラクト要件を再度指定しないと、悪い習慣と見なされますか?
また、コンパイル時チェックの機能があり、場合によってはコード コントラクトの設計時チェックも行われます。Visual Studio 2010 の C# ではまだ利用できないようですが、Spec# のように既に利用できる言語がいくつかあると思います。これらのエンジンは、そのようなメソッドを呼び出すコードを記述し、引数が現在null
.
では、これらのエンジンは、現在満たされていないコントラクトを持つメソッドが見つかるまで、常にコール スタックを分析するのでしょうか?
さらに、ここでとの違いについて学びましたContract.Requires(...)
Contract.Assume(...)
。その違いも、この質問の文脈で考慮すべきだと思いますか?
c# - C# 4.0 のコード コントラクトに関する書籍
Code Contracts については以前から知っていましたが、Java で少し使ったことがあるので、C# 4.0 の一部になったので、C# でも使い始めたいと思います。
学習教材、本、またはビデオを探しています。チュートリアルも大歓迎ですが、典型的な「Requires の使い方はこちら、Ensures の使い方はこちら」ではなく、包括的なものを読みたいと思います。この分野で本当に際立つものを探しています。
ありがとう