Почему исключения.NET изменяемы?

Я задаюсь вопросом, почему классы исключений.NET от Библиотеки базовых классов имеют некоторых изменяемых участников по умолчанию

  • Почему я могу измениться Source, HelpLink и значения от Data, но не может изменить ничто больше как Message?
  • Почему выдача исключения переписывает StackTrace создание его изменяемый также? Действительно ли добавление является информацией трассировки стека к существующей трассировке, был бы лучший дизайн (но все еще изменяемый)?
  • Каковы возможные улучшения дизайна исключений.NET могут быть?

Я интересен только в проектных решениях...

11
задан controlflow 20 June 2010 в 18:52
поделиться

1 ответ

По крайней мере, для меня StackTrace имеет смысл. Идея состоит в том, что Exception (как объект) может передаваться, возвращаться из методов и т. Д. StackTrace важен только тогда, когда возникает и перехватывается исключение. В некотором смысле, StackTrace на самом деле является скорее свойством выброса исключения, а не самого объекта Exception .

Что касается изменчивости других свойств, я предполагаю, что это просто потому, что легче создать экземпляр, назначая свойства, а не заставляя их все в конструкторе. Помните, что во время разработки Exception в C # не было дополнительных параметров.

Вы можете рассмотреть вариант перепроектирования, в котором Exception и производные классы являются неизменяемыми, но для этого потребуется фабрика исключений или класс построителя. Это только усложнило бы вывод из Exception .

10
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: