当实现接口时,我需要处理已记录的异常吗?

3
我正在通过在我的类中实现ICollection来创建自定义的C#集合,并注意到接口定义的一些方法有异常文档,例如http://msdn.microsoft.com/en-us/library/0efx51xw(v=vs.110).aspx
我所看到的所有关于实现接口的示例或文档似乎都没有谈论需要实现引发异常。每当接口中的方法文档显示该方法可能引发异常时,我是否应该检查每个条件并在我的实现代码中引发异常?

在你提到的情况中,这些都是框架会抛出的异常——空数组、数组索引小于0以及源集合中元素数量大于终点目标的可用空间。它并不是接口在实现异常处理(因为它不能),只是让开发人员知道这些异常可能会发生,并应该加以处理。顺便说一下,在我看来,这并不意味着开发人员需要实现try-catch——至少前两个异常可以通过编写正确的代码来处理。 - Tim
Tim - 感谢您的回复。我更多地在考虑这是否表明我应该在我的方法实现中检查这些条件(即数组== null),然后自己抛出ArgumentNullException异常。不过,文档表明的确是指示框架可能会在出现这些条件时抛出哪些异常,这是有道理的。 - Garry
事实上,最常见的实现方式(Array.Copy)自然会抛出适当的异常,因此您不需要进行自己的检查。我认为重要的是,您的实现不会抛出任何除文档中记录的异常之外的异常。 - nmclean
1个回答

1
当记录接口时,通常会包括XML文档以指示实现可能抛出的异常。这并不意味着实现必须能够抛出这些异常,只是它们可能抛出它们。
参见Liskov替换原则。具体来说,“子类型的方法不应抛出新的异常,除非这些异常本身是由超类型方法抛出的异常的子类型。”-http://en.wikipedia.org/wiki/Liskov_substitution_principle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接