10
我不知道为什么从基类库的.NET的异常类,默认拥有一些可变成员为什么.NET异常是可变的?
- 为什么我可以改变从
Data
的Source
,HelpLink
和价值观,但不能改变其他任何类似的Message
? - 为什么抛出异常会重写
StackTrace
使其变得可变?追加堆栈跟踪信息到现有的跟踪会更好的设计(但仍然可以)? - .NET异常设计可能有哪些改进?
我只是在设计上选择感兴趣的......
我不知道为什么从基类库的.NET的异常类,默认拥有一些可变成员为什么.NET异常是可变的?
Data
的Source
,HelpLink
和价值观,但不能改变其他任何类似的Message
?StackTrace
使其变得可变?追加堆栈跟踪信息到现有的跟踪会更好的设计(但仍然可以)?我只是在设计上选择感兴趣的......
的StackTrace
对我来说很有意义,至少。这个想法是,一个Exception
(作为一个对象)可能被传递,从方法返回等等。StackTrace
只有在引发和捕获异常时才重要。从某种意义上说,StackTrace
真的是越抛出异常,而不是Exception
对象本身的的财产。
至于其他性质的可变性,我认为它只是因为它更容易将其分配给的属性,而不是强迫他们都到构造函数构造一个实例。请记住,在设计时刻Exception
时,C#没有可选参数。
你可以考虑重新设计,其中Exception
和派生类是不可变的,但是这需要一个异常工厂或生成器类。它只会从Exception
派生出更加复杂的结果。
好的,如果问题是将大量数据传递给异常,为什么'Message'属性是只读的? – ControlFlow 2010-06-20 19:14:47
关于'StackTrace'的不错想法... – ControlFlow 2010-06-20 19:20:18
'Message'是一个非可选的信息片段,因此将它放在构造函数中是有意义的。 – 2010-06-20 19:23:15