Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于c#合同类和接口中的嵌套类型_C#_C# 4.0 - Fatal编程技术网

关于c#合同类和接口中的嵌套类型

关于c#合同类和接口中的嵌套类型,c#,c#-4.0,C#,C# 4.0,我正在寻找合同类,我看到一些代码示例。我想知道是什么。这里有一个这样的示例代码 [ContractClass(typeof(ICaseConverterContracts))] public interface ICaseConverter { string Convert(string text); } [ContractClassFor(typeof(ICaseConverter))] internal class ICaseConverterContracts : ICa

我正在寻找合同类,我看到一些代码示例。我想知道是什么。这里有一个这样的示例代码

[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(); 
    } 
}

我将断点放在
ICaseConverterContracts
类中的方法
ICaseConverter.Convert(字符串文本)
,但它没有中断。这是什么意思?自动检查名称是否不为空?

您看到的代码是一段使用的代码。代码契约提供的一些工具在默认情况下是可用的,但其他工具依赖于IL重写器,它在构建代码时修改代码。所以,在您安装代码契约并通过指令激活它之前,某些代码将不会被使用

我想你的问题有点太宽泛了。如果你有兴趣,请浏览我上面提供的链接。您发布的代码中的契约检查两件事:首先,它检查输入是否为
null
,然后检查输出是否也为
null

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