Contract.Requires vs Contract.Require

时间:2011-04-23 07:43:57

标签: .net contract

我注意到Microsoft以一种奇怪的方式在.NET 4中命名了他们与代码契约相关的函数。

他们在“require”和“ensure”结束时添加“s”,因此有Contract.Requires()和Contract.Ensures(),但不是在“assert”和“assume”的末尾,所以有Contract.Assert()和Contract.Assume()。差异让我有点困惑。

事实上,我真正的问题是,我正在尝试在PHP中使用代码契约,所以我写了一些东西来模仿.NET 4中的“契约”类。因为PHP没有内置方法来验证类型参数,我添加一个方法到我自己的Contract类进行一些验证。我选择“expect”这个词,因为我认为“期望参数'bar'是字符串但是...”是参数类型错误时的常见消息。问题来了。我应该将我的方法命名为Contract.Expect(),还是应该将其命名为Contract.Expects()?

我来自一个非英语国家,对于我可怜的英语很抱歉。 可能它实际上是一个英语问题,但我认为只有程序员可以帮助我。如果这个问题不合适,那就很抱歉。

1 个答案:

答案 0 :(得分:15)

我相信EnsuresRequires 描述了哪些方法需要和/或保证,而AssertAssume命令合同验证者

或者换句话说,前两个描述了关于方法的外部接口的前提条件/后置条件,而后两个只是帮助合同验证者为你做的工作的元数据方法。一个与用户相关,但另一个不是。