Я задаюсь вопросом, почему классы исключений.NET от Библиотеки базовых классов имеют некоторых изменяемых участников по умолчанию
Source
, HelpLink
и значения от Data
, но не может изменить ничто больше как Message
?StackTrace
создание его изменяемый также? Действительно ли добавление является информацией трассировки стека к существующей трассировке, был бы лучший дизайн (но все еще изменяемый)?Я интересен только в проектных решениях...
По крайней мере, для меня StackTrace
имеет смысл. Идея состоит в том, что Exception
(как объект) может передаваться, возвращаться из методов и т. Д. StackTrace
важен только тогда, когда возникает и перехватывается исключение. В некотором смысле, StackTrace
на самом деле является скорее свойством выброса исключения, а не самого объекта Exception
.
Что касается изменчивости других свойств, я предполагаю, что это просто потому, что легче создать экземпляр, назначая свойства, а не заставляя их все в конструкторе. Помните, что во время разработки Exception
в C # не было дополнительных параметров.
Вы можете рассмотреть вариант перепроектирования, в котором Exception
и производные классы являются неизменяемыми, но для этого потребуется фабрика исключений или класс построителя. Это только усложнило бы вывод из Exception
.