1
25
CC团队已经声明,使用属性还不够强大,因为您不能在属性中包含像lambda这样的内容。他们
能够
包括以下内容
CC是库(而不是扩展C的一部分)的一个原因是它在 全部的 NET语言。 你可以阅读更多关于团队推理的信息 here . 在实际使用中,到目前为止,我只是将接口契约保存在与接口相同的文件中,这意味着它都记录在相同的位置。这是应该改进的事情:)
你的第二个抱怨可能是可以实施的——我建议把它张贴在 the code contracts forum . (编辑:似乎有人 already has ,但还没有答案。) 然而,通常情况下,在特定的合同下,需要更多的假设来围绕它们。如果在.NET框架中遇到类似的情况,可以请求在 Missing Contracts on Libraries thread .
这个 has been addressed . 如果您有一个auto属性,只需添加一个非空的不变量,就会生成pre-/post条件:
不管怎样,您可能最终会得到类的其他不变量,所以这没什么大不了的。 |
2
11
是的,合同杂乱无章,但我觉得当 PEX 读取代码契约并为我生成25个单元测试和100%的代码覆盖率。如果您还没有使用PEX,那么您就错过了代码合同的最大好处。这是使用入门指南 PEX with contracts . |
3
9
我也很想喜欢它,并且在一个新项目中进行了相当大的实施, 直到我在琐碎的小问题的重压下放弃。 我很希望微软能恢复规范。我知道代码契约是作为跨语言可用的库编写的,但即使静态分析的速度也需要编译器的支持。 这家伙提出了一些同样的观点: http://earthli.com/news/view_article.php?id=2183 不管怎样,没有一个问题会破坏交易,而是不断累积的刺激:
|
4
3
如果您担心代码膨胀,那么我鼓励您查看 Aspect Oriented Programming 作为替代方案。 这将允许您在方面中指定契约,然后在契约中包装类的任何类或方法。如果您的契约将在多个类中使用,那么这将是一种更清洁的实现方法。 不幸的是,在C_中对AOP的支持不是很好,但是有几个库添加了这个功能。 我对其他C实现也有同样的感觉,就像你在合同中发现的那样,一开始一切看起来都很好,直到你掀起引擎盖,开始认真地使用它。 |
5
3
我为Visual Studio 2010创建了一个插件,它可以为您节省一些时间为接口和抽象类创建代码契约: http://visualstudiogallery.msdn.microsoft.com/en-us/d491911d-97f3-4cf6-87b0-6a2882120acf |
6
2
实际上,我发现接口实现非常好。它不会使您的接口或常规代码混乱,您可以将它整齐地存储在解决方案中的某个文件夹中,或者与您的接口存储在同一个类文件中,以您最喜欢的为准。 你为什么 必修的 要添加对象不变量吗?您只需要添加您认为必要的内容。 我理解您关于代码膨胀的观点,但我想这是与代码契约的权衡。额外的检查/安全意味着额外的代码,至少目前是如何实现的。我尽量在接口上保持尽可能多的契约,这至少可以帮助您减轻代码膨胀的痛苦。 |
Åafak Gür · 通用接口的嵌套约定 11 年前 |
julealgon · 为什么接口合同不适用于程序集之外? 11 年前 |
Jamie Dixon · 代码契约和接口实现-1-1关系的一些原因是什么 12 年前 |