2010-09-01 26 views

回答

6

是的。

代码合同是为了保持一个严格的编程接口,只有开发人员才能正确或错误;一个用户不应该真的能够搞砸了。

验证是为了验证数据;例如验证数据不为空,或匹配正则表达式。

+1

是的,合同失败意味着你在代码中有一个严重的错误,不应该被忽略/解决(这是默认情况下它不会引发可捕获异常的原因的一部分)。 – porges 2010-09-01 21:02:17

2

代码合同违反时会抛出异常。无效的用户输入不是一个例外情况,所以验证函数通常不应该抛出异常。这就是为什么像TryParse这样的方法被添加到框架中的原因(原始框架没有它们,并且由于所有可能的例外而导致验证繁琐)。

0

代码契约被用来断言永远是真实的东西,如果它们不是真的,那么代码中就有一个错误。这意味着它只能应用于由代码控制的条件。所以,你不能用它们来陈述“用户永远不会提供一个空字符串”,因为这不在代码的控制之中。静态验证者将永远无法证明这一陈述 - 它如何知道用户会做什么?

你能做的就是做出像“给定用户输入,该方法将返回一个非空字符串或抛出异常”的语句。