2015-05-29 98 views
0

我有相当大的类使用更多的类。它使用外部资源(数据库,文件等),并且可能会发生一些例外情况。如何在类级别处理未处理的异常

As I learnedsometimes最好使用UnhandledException事件,而不是将try-catch块放在任何地方。

但是,我的课只是许多其他课程之一,上述解决方案在应用程序级别上工作。

只有当在这个类中引发的异常和其他未处理的异常不会被捕获时,我才能以某种方式缩小它的范围才能被解雇?

使用AOP似乎是一种好方法,但我不确定。

+1

如果您在“类”中处理异常,那么它不是未处理的异常。只有当你知道*如何处理它时才添加try/catch *和*可以有意义地继续运行程序。这两种情况很少是真的。 –

回答

1

我不知道我是否完全理解了你的问题,但仍然允许我尝试回答它: 你在问是否可以加载你的班级,以便知道哪些例外可能会生成,正在加载DLL的类中处理?这看起来不可能,只是因为调用层次结构。我的建议是,你记录这些异常可能会在你的类被抛出,利用这种机制:

/// <exception cref="ArgumentOutOfRangeException">Thrown if argument is greater than the size of the array.</exception> 

这样,你的通话类可以更好地准备处理异常,并知道或多或少其可能的例外没有被处理。

另一种方法是将代码封装在try-catch块中,并使用更具体的异常首先被处理的事实。然后,您可以处理可以通过编程方式解决的场景,然后最后捕获通用异常,以确保即使基础类灾难性地发生故障,您的程序仍然保持稳定。

不幸的是,我不明白你将如何告诉你的被调用的dll,它可能抛出哪些异常正在处理中。

+0

感谢您的解释。我打算避免尝试抓取块,因为它们会导致性能下降,但根据您的意见,我最终必须利用它们。我会研究AOP,也许他们提供了一些可定制的方法。 – Nestor

+1

@Nestor Try-catch块不会导致性能下降(请参阅:http://stackoverflow.com/a/3480151/261050),只有抛出的异常会导致性能下降。所以尽量减少你抛出的异常数量,你会没事的。 – Maarten

+0

@Maarten谢谢,因为我指出,我也会考虑这个。 – Nestor