![]() |
1
4
这实际上并不特定于Win32异常;问题是,什么时候两个不同的错误案例应该由两个不同的异常派生类型标识,什么时候它们应该抛出同一个类型并在其中存储不同的值? 不幸的是,如果事先不知道您的代码将被调用的所有情况,这是不可能回答的。:)这就是只能按类型筛选异常的问题。从广义上讲,如果您强烈认为以不同的方式处理两个错误案例是有用的,那么抛出不同的类型。
如果有其他信息,请使用您自己更高级的内容包装Win32Exception。例如,您正试图对文件执行某些操作,而您运行的用户没有执行该操作的权限。捕获Win32Exception,将其包装在自己的异常类中,其消息给出文件名和尝试的操作,然后是内部异常的消息。 |
![]() |
2
3
我的观点一直是,适当的处理方法取决于目标受众以及如何使用您的类。
如果类的调用方不知道您正在直接调用Win32 API,我将处理异常,并使用您定义的自定义、更具描述性的异常。例如,如果我正在使用您的类,并且没有迹象表明您正在使用Win32 api(因为您在内部使用它是出于某种特定的、不明显的原因),我就没有理由怀疑我可能需要处理Win32异常。您可以随时记录这一点,但对我来说,捕获它并给出一个在您的特定业务环境中更有意义的例外似乎更合理。在这种情况下,我可能会将初始Win32Exception包装为内部异常(即:您的案例4),但取决于导致内部异常的原因,我可能不会。
不过,总的来说,我会避免您列出的选项2和选项3。 选项二抛出了一种通用的异常类型——我非常建议完全避免这种情况。将一个特定的异常包装成一个更一般化的异常似乎是不合理的。
|
![]() |
3
2
就我个人而言,我会做2或4次……最好是4次。将Win32Exception包装在上下文敏感的异常中。这样地:
|