关于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));
}
}