例如,我有一个dll(Helper.dll
),其中包含一些通过提供程序库(Provider.dll
)处理外部系统的方法。 Provider.dll
定义SystemIsDownException
,然后将其重新投放到Helper.dll
中。另外,我有另一个使用Service.dll
和其他吨的dll(Helper.dll
),它必须捕获不同类型的异常并以某种方式处理它们。我的问题是:如果我在SystemIsDownException
中抓住Provider.dll
(来自Service.dll
),是否真的会影响效果?或者我应该为Provider.dll
中Helper.dll
的每个例外定义自己的例外类型吗?抱歉,这是一个很长的问题。
答案 0 :(得分:3)
按照逻辑术语做你必须做的事情,而不关心表现。
不要基于性能考虑来设计异常类型。如果您发现它们对图书馆的有用性和清晰度有意义且有帮助,请创建它们。
答案 1 :(得分:2)
简要回答您的问题:如果您不处理异常并添加有用信息,请不要捕获并重新抛出异常。只是捕获异常然后重新抛出它们会混淆堆栈跟踪(例如,当原始异常丢失时),当然它会影响性能(因为运行时需要准备堆栈跟踪哑巴)。如果provider.dll
无法引用service.dll
,则需要隐藏helper.dll
中的例外情况,您需要在provider.dll
中重新抛出它们(如果您想从service.dll
中捕获特定的例外情况{1}}中的{1}}。
答案 2 :(得分:1)
一些想法:
所以答案是:定义你需要(明显地)处理的有用且有意义的异常。没有性能损失,除非您使用异常来指导逻辑流,在这种情况下,您应该停止并重构您的应用程序。