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