我正在寻找合同类,我看到了一些代码示例。我想知道它是什么。所以有一个这样的示例代码。
[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));
}
}
我将断点放在ICaseConverter.Convert(string text)
类的方法ICaseConverterContracts
中,但它没有中断。它是什么?自动检查名称是否为空?
答案 0 :(得分:0)
您看到的代码是一段使用Code contracts (here) (and here)的代码。代码合同提供的一些工具在默认情况下是可用的,但是其他工具依赖于在构建代码时修改代码的IL重写器。因此,在您安装代码合同并通过指令激活它之前,将不会使用某些代码。
我认为你的问题有点过于宽泛。如果您有兴趣浏览我上面提供的链接。您发布的代码中的合同检查两件事:首先,它检查输入是否为null
,然后检查输出是否也不是null
。