为了充分理解和利用新的 .NET Framework 4.0 提供的新功能和增强功能,我想获得一个代码协定在实际应用中的示例。
- 任何人都有应用此功能的好例子吗?
我想获得一个带有简要说明的代码示例,以帮助我启动并运行它。
为了充分理解和利用新的 .NET Framework 4.0 提供的新功能和增强功能,我想获得一个代码协定在实际应用中的示例。
我想获得一个带有简要说明的代码示例,以帮助我启动并运行它。
来自代码合同用户手册:
契约允许您在代码中表达前置条件、后置条件和对象不变量,以用于运行时检查、静态分析和文档。
代码合约用于静态验证;想象一下,如果在编译时,您不仅发现了语法错误,还发现了逻辑错误。这就是静态程序验证的愿景。
您可以使用合同(和静态验证)来降低测试成本……尤其是回归测试。例如,假设我编写了一些满足某些业务需求的代码……但是后来,性能需求发生了变化,我需要进行优化。如果我首先编写一个合约,然后 - 当我的新优化代码得到验证时 - 如果它不再满足原始合约,我将在我的 IDE 中收到一条错误消息,就像我遇到编译时错误一样。因此,您几乎可以立即发现并解决错误,而这花费的成本不到一轮测试。
在即将出版的C# in Depth, second edition一书中,有一个关于代码契约的免费章节。由一个叫 Jon Skeet 的人写的,你们中的一些人可能对他很熟悉 :)
至于实际使用。您可以在代码中的任何地方使用它们,但特别是如果您正在开发很多人将使用的框架/API 类型库,我希望它们会派上用场。与在运行时发现您没有处理某些极端情况相比,对代码进行静态验证可以节省大量时间。
您可以随心所欲地记录您的方法使用情况,但人们真的会阅读该文档吗?是否允许方法 y 中的字符串参数 x 为空?代码合约可以提供该信息,以消除猜测。
这是这种情况的一个示例:
static int CountWhitespace(string text)
{
Contract.Requires<ArgumentNullException>(text != null, "text");
return text.Count(char.IsWhiteSpace);
}
如果有人试图将字符串传递给CountWhitespace
可能为空的字符串,验证会报错。此外,它会在运行时抛出 ArgumentNullException。
我最近才将我的私有类库转换为 .NET 4.0,但我计划很快将代码合同添加到其中。
.Net 中有很多地方使用合同。 >>来源<<
您是否曾经看到过NullReferenceException
并希望编译器可以在编译时警告您以避免找出困难的方法 - 您的程序崩溃?
使用代码合同,您可以编写如下内容:
Contract.Requires(foo != null);
这不仅仅是运行时检查 - 您可以对其进行设置,以便如果您使用可能为 null 的参数调用此函数,您将收到编译错误。
这是一个真实世界的例子:
Address GetAddress(Customer customer)
{
Contract.Requires<ArgumentNullException>(customer != null, "customer");
return addressBook.FindCustomer(customer);
}