【问题标题】:Code Contract Errors代码合约错误
【发布时间】:2011-10-29 04:10:55
【问题描述】:

有没有办法改变代码契约在运行时的行为方式?例如,当运行时前或后条件失败时,应用程序崩溃。有没有办法不崩溃,而是显示一个 MessageBox??

【问题讨论】:

  • 这个帖子有点含糊;我看到您提到 C# 作为参考语言,您能给我们一个代码示例以及实际操作与所需操作吗?谢谢。

标签: c# code-contracts contract


【解决方案1】:

当合约失败时,程序不会“崩溃”,但会引发异常。 Contracts 类允许您控制什么样的异常。

因此,您需要某种形式的异常处理,而不仅仅是合同。

话虽如此,失败的合同通常严重到足以终止应用程序。

【讨论】:

  • +1 表示“失败的合同通常严重到足以终止应用程序”。 @happyguy:如果您在验证的每一点都使用合同,那么您可能使用错了。您应该确保在将值传递给将根据其合同拒绝它们的类之前预先验证您的值。违反合同是例外,例外应该用于异常行为。一个例子是如何(并且应该)在打开之前检查File.Exists,以避免FileNotFoundException
  • @MerlynMorgan-Graham - 你的观点很好,但你的例子不是最好的。文件的存在(通常)不适合方法契约,因为文件的存在取决于程序无法控制的事物。也就是说,可以在调用File.Exists 和尝试打开文件之间删除或移动文件。这类事情(被 Eric Lippert 称为“外生异常”)通常最好使用普通的结构化异常处理机制来处理。
  • (续)合约最适用于状态已知不会随意改变的事物(如空引用或按值参数的整数范围检查)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 2021-07-05
  • 2014-04-08
相关资源
最近更新 更多