2017-04-27 11 views
0

私はいくつかのコード例を見る契約クラスを探しています。私はそれが何であるのだろうか。したがって、このようなサンプルコードがあります。についてC#契約クラスとインターフェイスのネストされたタイプ

[ContractClass(typeof(ICaseConverterContracts))] 
public interface ICaseConverter 
{ 
    string Convert(string text); 
} 
[ContractClassFor(typeof(ICaseConverter))] 
internal class ICaseConverterContracts : ICaseConverter 
{ 
    string ICaseConverter.Convert(string text) 
    { 
     Contract.Requires(text != null); 
     Contract.Ensures(Contract.Result<string>() != null); 
     return default(string); 
    } 

    private ICaseConverterContracts() {} 
} 

public class InvariantUpperCaseFormatter : ICaseConverter 
{ 
    public string Convert(string text) 
    { 
     return text.ToUpperInvariant(); 
    } 
} 

ここでは契約は何ですか?

私はInvariantUpperCaseFormatterの新しいインスタンスを作成しました。

class Program 
{ 
    static void Main(string[] args) 
    { 
     InvariantUpperCaseFormatter formatter = new InvariantUpperCaseFormatter(); 
     Console.Write(formatter.Convert(string.Empty)); 
    } 
} 

と私はICaseConverterContractsクラスのメソッドICaseConverter.Convert(string text)にブレークポイントを置くが、それは壊れません。それは何ですか? nameがnullでないかどうかを自動的に確認しますか?

答えて

0

コードは、Code contracts (here)(and here)を使用するコードです。コードコントラクトによって提供される機能の一部は、デフォルトで使用可能ですが、ビルド時にコードを変更するILリライタに依存するものもあります。したがって、コード契約をインストールしてディレクティブでそれを有効にするまで、いくつかのコードは使用されません。

あなたの質問は少し広すぎると思います。私が上で提供したリンクをサーフィンに興味があるなら。投稿したコードの契約では、まず入力がnullでないことを確認した後、出力がnullでないことをチェックします。

関連する問題