在接口定义期间应该或不应该声明异常?

时间:2017-03-13 07:31:23

标签: c# interface exception-handling

这个问题让我感到很困惑,很长一段时间。我注意到有人问过类似的问题,但对我来说并没有一个完美的答案。 令我困惑的是:

  1. 如果我在接口定义期间声明异常,实际上,同一个接口可能有多个实现,不同的人可能会抛出不同的异常。我认为我们不应该限制界面这么紧张。
  2. 另一方面,如果我们不声明异常,我们就不容易知道方法在接口编程期间可能抛出的异常。通过这种方式,接口用户必须知道接口实现的细节。
  3. 那么,平衡点是什么?我应该遵循哪种方式?或许我对界面编程的理解是错误的。

    非常感谢。

1 个答案:

答案 0 :(得分:0)

我认为你不应该将实现接口的用户绑定到严格的异常。他/她可能需要实现自己的异常类型或抛出您正常想到的其他异常。这是基于您的界面的抽象程度。如果您在IList上考虑可以在Add(object item);上抛出哪些例外情况?如果你创建了界面,你就无法知道这一点,因为我想说我想创建一个新类如下:

public class FileList : IList
{
   public void Add(object item)
   {
      try
      {
      }
      //Here I could need this Exception which you can't know on interface-Level
      catch(FileNotFoundException ex)
      {
      }
   }
}

这只是我的观点,你不会得到一个明确的答案如何使用它。如果您确实需要或想要在接口级别标记异常,我建议您使用XML-Comments:

/// <summary>
/// Adds an object to your List
/// </summary>
/// <param name="item">The Item to Add</param>
/// <exception cref="FileNotFoundException"></exception>
/// <exception cref="ArgumentNullException"></exception>