【问题标题】:How to explicitly document that a method does not throw exceptions如何显式记录方法不会引发异常
【发布时间】:2014-05-04 12:46:15
【问题描述】:

在 C# 中使用 XML cmets,我可以记录一个方法可能会引发异常:

<exception cref="FooException">Thrown if foo is invalid.</exception>

但是,如果一个方法在其 XML 文档中没有 exception 标记,这可能意味着以下两种情况之一:

  1. 作者彻底测试了该方法,确保它永远不会抛出异常,并希望通过不添加exception 标签来记录这一事实。
  2. 作者并不关心记录异常,所以这个方法可能会抛出任何东西。

根据我的经验,通常是第二种情况。那么问题来了:

如何明确记录方法永远不会引发异常?

到目前为止,我想出的最好的方法就是在方法的summary 中简单地提及它,例如“此方法不会引发异常”。但我想知道是否有更正式的方式来表达这一点,比如 C++ 中的throw()(尽管这可能是一个不好的例子)。

【问题讨论】:

  • 很难保证一个方法不会抛出 any 异常——考虑OutOfMemoryExceptionThreadAbortException。我想您能做的最好的事情就是在&lt;remarks&gt; 部分提及该方法通常不应引发异常。

标签: c# exception xml-comments code-documentation


【解决方案1】:

将其添加到摘要中有助于文档编制和与其他开发人员的交流。

你说你想要一个更正式的方式,强硬。 根据我对 C# 的了解(很少),Exception 有两个主要的子类,ApplicationExceptionSystemException。您通常不能保证不会引发系统异常。但是,我们可以保证不会抛出任何 ApplicationException

1。有合同

使用code contracts,您可以使用EnsuresOnThrow 后置条件:

    Contract.EnsuresOnThrow<ApplicationException>( false );

2。没有合同

将代码主体包装在全局 try/catch 中,并在 catch 块中声明 False

在这两种情况下,静态分析器应该明白,当异常发生时,断言或后置条件永远不会为真:因此,当且仅当没有异常时,应用程序才会履行其合同从你的函数中抛出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 2019-03-11
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多