记录接口及其实现

时间:2009-11-28 22:00:24

标签: c# documentation interface documentation-generation sandcastle

我正在使用注释装饰我的C#代码,因此我可以生成HTML帮助文件。

我经常声明并记录接口。但实现这些接口的类可能会抛出特定的异常,具体取决于实现。

有时,客户端只知道他正在使用的接口。我应该通过添加可能由其实现者抛出的异常来记录我的接口吗?

我应该创建/记录自定义异常,以便接口实现者抛出这些而不是框架的那些吗?

我希望这很清楚!

由于

编辑2010年1月4日:我决定在http://blog.mikecouturier.com/2010/01/creating-custom-exceptions-in-net-right.html

撰写一篇关于.NET和自定义异常的博客文章

2 个答案:

答案 0 :(得分:14)

我不确定我是否完全理解你的问题(我是一个Java,而不是C#开发人员),但似乎你问的是什么本质上是一个多态的问题:如果有人在接口上使用一个方法声明抛出X和Y,如果实现抛出Z?

会发生什么

遵循的原则是一致性原则,基本上说子类型应该符合超类型的行为。也就是说,如果您正在记录接口中的方法只能抛出一种类型的异常(例如,空指针异常),那么与调用者的合同就是他们应该注意的唯一事情。如果你扔别的东西,你可能会惊讶他们。

在超类型中记录关于特定子类型的事情不是一个好主意,因为它会创建不必要的耦合。我会更关注一个实现可能与声明的行为不同的事实,因为这可能表明声明没有充分充实。

尝试思考您的方法可能抛出的所有类型的异常。为它们创建超类型,然后在您的接口方法中显式声明(例如,此方法可能会抛出一些“计算异常”)。然后,在您的实现中,抛出一个带有更多细节的计算异常,或抛出一个特定于该实现的计算异常的子类型,您仍然可以符合。

答案 1 :(得分:6)

我同意Uri所说的一切 - 你应该在合理的地方创建自定义异常,如果需要可以扩展,然后使用键入接口的参数的方法可以捕获该异常并且它也将捕获子类型异常。

不要不必要地创建它们,如果存在描述你的错误条件的现有.Net Framework异常那么

就实现者的文档而言,您可以使用注释的备注部分(假设您正在使用XML注释)来描述诸如您希望实现者执行操作的方式。显然,这绝不是可执行的,但当开发人员使用您的API时,它可以作为有用的指导