问题标签 [code-contracts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7826 浏览

c# - C#:代码契约与普通参数验证

考虑以下两段代码:

我个人更喜欢第一个版本,因为代码更清晰更小,并且可以轻松关闭合约。但缺点是 Visual Studio Code Analysis 指责我应该检查参数值是否为 null,并且构造函数的 Contracts 没有意识到正则表达式确保分钟和小时在给定的边界内。

所以我最终得到了很多错误的警告,而且我看不到用合同验证字符串值而不最终抛出除 RegEx 验证之外的 FormatExceptions 的方法。

有什么建议您将如何使用代码合同解决这种情况和等效情况?

0 投票
1 回答
2695 浏览

c# - 重写期间的 CodeContracts 元数据错误

我正在尝试在一个大型桌面应用程序项目中使用带有 .NET 3.5 的代码合同,该项目还具有混合模式 C++ DLL 依赖项,以旧的托管 C++ 语法编写。

真正的解决方案至少包含 20 个项目,但假设只有 A、B、C 和 D 项目,以及混合模式 M 项目。C依赖于A、B和M。A、B和C都配置为执行运行时检查,代码重写效果很好。现在我想将一些合同添加到一个更高级别的程序集中,称为 D。D 也依赖于所有其他程序,A、B、C 和 M。现在 D 的代码重写失败并显示以下消息(我已更改名称):

因为关于 M 的消息,我认为问题出在混合模式 C++ DLL 上。但是 C 程序集本身可以成功地重写代码,同时它也引用了 M。

我还认为问题不直接在于 D 程序集,因为我已经在同一解决方案中尝试了其他更高级别的程序集,并且如果它们引用 C,它们就不能被代码协定工具重写。

我使用的版本是 1.2.21023.14

我也在 CodeContracts MSDN 论坛上问过这个问题,但还没有收到任何答案,所以我想我会在这里尝试。我对与此相关的任何解决方法或想法感兴趣。

0 投票
2 回答
3037 浏览

.net - 代码合同:如何为通用接口提供合同类?

我想为这个通用接口指定一个合同,使用代码合同:

文档说在ContractClass为接口指定合同时使用该属性。但是,编译器会抱怨这个:

似乎类型参数不能与属性一起使用。

如何为的通用接口编写合同?还是代码合同不可能做到这一点?

0 投票
1 回答
692 浏览

c# - 代码合同:我如何在后置条件中声明字段/属性的值没有改变?

我最好用一个代码示例来展示我想要完成的事情?

(传递给的字符串Contract.Ensures()当然只是真正的后置条件表达式的占位符。)

我怎样才能做到这一点?在这里有用吗Contract.OldValue<>()

0 投票
3 回答
1658 浏览

c# - 让代码协定在 Visual Studio 2010 中工作

我有以下代码:

我在调试模式下运行它,它应该在最后一行引发某种错误

尽管如此,由于某种原因,它没有。它似乎忽略了 Contract.Requires() 调用。在尝试使用代码合同时我应该设置一些东西吗?

我正在使用 Visual Studio 2010 RC。

谢谢

0 投票
2 回答
663 浏览

c# - Visual Studio 2010 Pro RC 中的 Code Contract 属性

因此,Visual Studio 2010 的属性中似乎应该有一个“代码合同”选项卡。我在任何地方都找不到它。也许这是我的 Visual Studio 安装的问题?我正在运行 RC 版本。

这就是我所拥有的:

替代文字 http://img192.imageshack.us/img192/5928/lcmitpm2aur5e4uiabdtofw.png

有谁知道可能出了什么问题?也许我找错地方了?

谢谢

0 投票
1 回答
4750 浏览

.net - 带有接口的代码合同:“跳过了方法调用。编译器将生成方法调用,因为该方法是有条件的...... [...]”

晚上好,

我刚刚开始使用 Microsoft.Contracts(最新版本)并将其插入示例界面之上,现在它看起来像这样:

现在为什么这两个 Contract.Ensures(...) 在视觉上“模糊”了,工具提示说“跳过了方法调用。编译器将生成方法调用,因为该方法是有条件的,或者它是没有实现的部分方法”,实际上是 CodeContracts输出不计算/显示它们......我在这里错过了什么和做错了什么?

-J

0 投票
1 回答
497 浏览

visual-studio - 使用代码合约启动并运行

在 VS2010 和 .NET 4.0 中,我在智能感知中看到了将合同添加到我的代码(例如 cr、crr)中的快捷方式,但是当我选择添加这些合同时,代码(例如 Contract.Requires)没有有效的程序集,所以没有智能感知(基本找不到类型)。

我究竟如何启动并运行代码合约?

编辑:所有方法都存在于 System.Diagnostics.Contracts 中,但我认为我会在整个过程中使用属性?此外,可用的合同有很多不同的 .dll!

谢谢

0 投票
2 回答
2184 浏览

c# - 代码合同:我们是否必须在委派方法中冗余地指定 Contract.Requires(...) 语句?

我打算在未来的开发中使用新的 .NET 4 Code Contracts功能。这让我想知道我们是否必须Contract.Requires(...)在方法链中冗余地指定等效语句。

我认为一个代码示例值一千字:

对于运行时检查来说,这并不重要,因为我们最终总会遇到需求检查,如果它失败了我们会得到一个错误。

但是,当我们在第二次重载中没有再次指定合同要求时,这是否被认为是不好的做法?

此外,还会有编译时检查的功能,可能还有代码合约的设计时检查。它似乎在 Visual Studio 2010 中还不能用于 C#,但我认为像 Spec# 这样的语言已经可以使用。当我们编写代码来调用这样的方法时,这些引擎可能会给我们提示,而我们的参数当前可以或将会是null.

所以我想知道这些引擎是否会一直分析一个调用堆栈,直到他们找到一个当前不满足合约的方法?

此外,在这里我了解了Contract.Requires(...)Contract.Assume(...)之间的区别。我想在这个问题的背景下也要考虑这种差异呢?

0 投票
3 回答
1011 浏览

c# - C# 4.0 中的代码契约书籍

虽然我已经知道代码合同一段时间了,因为我在 Java 中使用过它,但我想开始在 C# 中使用它们,因为它们是 C# 4.0 的一部分。

我正在寻找学习材料、书籍或视频。粗略的教程也很受欢迎,我想阅读一些全面的东西,而不是典型的“这是你如何使用 Requires,这是你如何使用 Ensures”。我正在寻找在这个领域真正脱颖而出的东西。

谢谢