我想知道为什么.NET基类库的异常类默认具有一些可变成员
- 为什么我可以更改
Source
,HelpLink
和Data
的值,但不能更改像Message
这样的任何其他内容? - 为什么抛出异常会重写
StackTrace
,使其也成为可变的?将堆栈跟踪信息附加到现有跟踪中是否是更好的设计(但仍然是可变的)? - .NET异常设计可能存在哪些改进之处?
我只对设计选择感兴趣...
StackTrace
对我来说很有意义。其想法是,Exception
(作为一个对象)可能会被传递、从方法中返回等。当抛出和捕获异常时,StackTrace
只是重要的。在某种意义上,StackTrace
更像是异常 抛出 的属性,而不是 Exception
对象本身的属性。Exception
时,C# 没有可选参数。Exception
和派生类成为不可变的,但这将需要一个异常工厂或构建器类。这只会使从 Exception
派生变得更加复杂。
Message
属性是只读的? - controlflow