新しい C# プロジェクトに着手しようとしています。コード コントラクトとコード アナライザー (Roslyn) の使用の違いは何だろうと思っていました。それぞれの使い方を誤解していますか?新しいプロジェクトなので、コードの整合性を維持したいと考えています。したがって、他の開発者には特定のコード ガイドラインを順守してもらいたいと思います。それぞれをさらに調査しますが、最初にコミュニティの意見を聞きたかったのです。質問失礼します。私はまだ C# 開発に慣れていません。
2 に答える
これらは 2 つの異なるツールです。
Code Contracts は、事前条件や事後条件などのコントラクトを宣言およびチェックする方法です。
public class Foo
{
public Foo(object arg)
{
Contract.Requires<ArgumentNullException>(arg != null);
}
public object GetBar()
{
Contract.Ensures(Contract.Result<object>() != null);
// TODO:
}
}
CC は実行時に条件をチェックします。これには、適切な呼び出しをコードに挿入するために、コンパイル後にアセンブリ (ソース コードではなく!)を書き直す必要があります。
コード アナライザーは、Roslyn を使用して、作成中にソース コードを分析します。Dispose
これらは、コードをフォーマットしたり、を呼び出すように促したりするのに役立ちますが、IDisposable
実行時の動作には直接影響しません。
Code Contractsはスタンドアロン プロジェクトですが、目的別にプロジェクト ( StyleCopAnalyzersなど)にグループ化された多くのアナライザーがあります。
(CC には静的アナライザーもありますが、ここではあまりわかりません。実際のプロジェクトで使用するとパフォーマンスが低下するため、通常はオフになっています。とにかく、契約をチェックすることを目的としています。)
コード アナライザーは、よくある間違いについてコードを分析します。コードの構造とデータの流れを調べて、問題を検出します。
別のタイプのアナライザーは、スタイル (StyleCop など)、大文字、キャメル ケーシング、プレフィックス、ポストフィックスなどを調べます。
3 番目のタイプは、あなたが言及したコード コントラクトであり、これは少し異なります。コードの予想される動作を宣言します。たとえば、メソッドに渡されるパラメーターに予想されること、コードがスローできる例外などです。コントラクト アナライザーは、呼び出し元のコードが正しいパラメーターを渡しているかどうかをチェックします (たとえば、アナライザーはnull を渡すと、それが許可されていない場合はエラーが発生します)。同時に、メソッドの「内部整合性」をチェックして、スローできない例外をスローしないようにします。実装に応じて、コントラクトは実行時またはコンパイル時に検証できます。