在C#中使用XML注释,我可以记录方法可能抛出异常:
<exception cref="FooException">Thrown if foo is invalid.</exception>
但是,如果某个方法的XML文档中没有exception
标记,这可能意味着以下两种情况之一:
exception
标记来记录这一事实。根据我的经验,第二种情况通常就是这样。问题是,那么:
如何明确记录方法永远不会抛出异常?
到目前为止,我提出的最好的方法是在方法的summary
中简单地提及它,就像“此方法不会抛出异常”。但我想知道是否有更正式的表达方式,比如C ++中的throw()
(即使这可能是一个不好的例子)。
答案 0 :(得分:2)
在摘要中添加它有助于文档和与其他开发人员的沟通。
你说你想要一个更正式的方式,艰难。
根据我所知的C#(非常少),Exception
有两个主要的子类,ApplicationException
和SystemException
。您通常无法保证不会抛出系统异常。但是,我们可以保证不会抛出ApplicationException
。
使用code contracts,您可以使用EnsuresOnThrow
后置条件:
Contract.EnsuresOnThrow<ApplicationException>( false );
将代码正文包装在全局try/catch
中,并在catch块中声明False
。
在这两种情况下,静态分析器应该理解,当发生异常时,断言或后置条件永远不会为真:因此,当且仅当没有异常时,应用程序才会满足其合同从你的功能中抛出。