【问题标题】:Throw exception where the class was instantiated - C#在类被实例化的地方抛出异常 - C#
【发布时间】:2013-04-29 00:42:51
【问题描述】:
我正在开发一个供程序员使用的库。
当我抛出异常时,调试器会转到抛出异常的位置,而不是实例化类或执行方法的位置。
使用 try .. catch 可以解决这个问题,但是如果使用该库的程序员没有打开 try .. catch 怎么办?他会看到我所有的代码!
我怎样才能避免这种情况?
【问题讨论】:
标签:
c#
class
exception
methods
throw
【解决方案1】:
好吧,如果您制作了库的发布版本并且您不提供调试器符号 (pdb),则库用户的调试器不应显示您的代码。
OTOH,你知道反射器之类的工具吗?您的代码并不是真正的秘密。
【解决方案2】:
他会看到我所有的代码!
是的,如果您分发代码。如果不这样做,您希望如何看到代码?不要忘记,与大多数使用您的库的开发人员所处的情况不同,因为您的机器上有源代码。在没有源代码的机器上尝试相同的 DLL。
开发人员可能会看到您的代码的反编译版本,这可能是个大问题吗?如果是这样,您应该考虑混淆您的代码 - 但请注意,这也会带来一些后勤方面的缺点。
我怀疑这真的不是问题。
【解决方案3】:
如果我了解您要查找的内容,我认为您想在代码中使用 try catch,而不是处理异常的 catch 块,您想像这样重新抛出它:
try
{
//exception code
}
catch (Exception e)
{
throw e;
}
如果我没记错的话,像这样抛出会重置堆栈跟踪,而仅仅抛出会保持堆栈跟踪完好无损。