.NET 4.0中的开箱即用代码契约

时间:2011-08-10 07:22:29

标签: c# visual-studio-2010 code-contracts

我真的想在Visual Studio 2010中尝试新的代码契约,但我不想为Visual Studio安装额外的扩展(因为我的代码与我的同事共享)。 现在,当面向.NET 4.0时,我可以使用新的System.Diagnostics.Contracts命名空间,但我还没有做任何事情。

例如,使用

static void Main(string[] args)
{
    Greet(null);
    Console.ReadLine();
}

private static void Greet(string name)
{
    Contract.Requires(name != null);
    Console.Out.WriteLine("Hello {0}", name);
}

程序编译并运行(显示“Hello”),没有任何警告。如果我尝试使用Contract.Requires<ArgumentNullException>(name != null),我会收到一条消息,告诉我必须使用重写器,无论名称的值如何。 谷歌告诉我,当我安装Code Contracts premium时,我可以获得任何魔力,但是当我不安装时,这个命名空间的目的是什么?我可以将代码合约用于除开箱即用的精心评论之外的其他内容吗?

2 个答案:

答案 0 :(得分:6)

好吧,如果你定义了CONTRACTS_FULL预处理器符号,那么由于没有运行重写器(根据注释),各种Contract.*方法将失败。除非您定义预处理器符号,否则它们将在编译时被忽略。

在框架中包含最低限度的Code Contracts类是为了在部署代码时不必安装额外的软件 - 但是你需要安装额外的工具以进行构建时后处理。

答案 1 :(得分:2)

我想答案是您反对安装扩展程序。开箱即用的合同意味着您可以使用您希望的合同,您的同事将能够编译代码而无需安装任何扩展。

然后您可以继续安装扩展程序并从合同中获得真正的好处,而不会对您的同事施加任何新的要求