con*_*low 11 .net exception-handling exception throw
我想知道为什么基类库中的.NET异常类默认有一些可变成员
Source
,HelpLink
和值Data
,但不能改变其他任何像Message
?StackTrace
使它变得可变?将堆栈跟踪信息附加到现有跟踪是更好的设计(但仍然可变)?我只是在设计选择上很有意思......
Ste*_*ary 10
该StackTrace
对我来说很有意义,至少.这个想法是一个Exception
(作为一个对象)可以传递,从方法等返回.这StackTrace
只是一个异常,因为抛出并捕获异常.从某种意义上说,StackTrace
实际上更多的是抛出异常的属性,而不是Exception
对象本身.
关于其他属性的可变性,我认为这只是因为通过赋值属性而不是强制它们全部进入构造函数来构造实例更容易.请记住,在Exception
设计时,C#没有可选参数.
您可以考虑重新设计where Exception
和派生类是不可变的,但这需要异常工厂或构建器类.它只会从Exception
更复杂的东西中衍生出来.