Почему исключения .NET изменчивы? - PullRequest
11 голосов
/ 20 июня 2010

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

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

1 Ответ

10 голосов
/ 20 июня 2010

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

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

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

...