2010-06-20 13 views
10

me pregunto por qué clases de .NET excepciones a la biblioteca de clases base tiene algunos miembros mutables por defecto¿Por qué las excepciones de .NET son mutables?

  • qué puedo cambiar el Source, HelpLink y los valores de Data, pero no puedo cambiar nada más como el Message ?
  • ¿Por qué lanzar la excepción reescribe el StackTrace haciéndolo mutable también? Si anexa la información de seguimiento de la pila a la traza existente, ¿sería mejor el diseño (pero aún mutable)?
  • ¿Qué posibles mejoras en el diseño de excepciones .NET pueden ser?

Estoy interesado solamente en las opciones de diseño ...

Respuesta

9

El StackTrace tiene sentido para mí, al menos. La idea es que un Exception (como un objeto) se puede pasar, regresar de los métodos, etc. El StackTrace solo es importante ya que se lanza y captura una excepción. En cierto sentido, StackTrace es realmente más una propiedad del arrojando de la excepción, no el objeto Exception.

En cuanto a la mutabilidad de las otras propiedades, supongo que es solo porque es más fácil construir una instancia asignando propiedades en lugar de forzarlas al constructor. Recuerde que en el momento en que se diseñó Exception, C# no tenía parámetros opcionales.

Podría considerar un rediseño donde Exception y las clases derivadas son inmutables, pero esto requeriría una fábrica de excepción o una clase de constructor. Simplemente haría derivar de Exception mucho más complejo.

+0

ok, si el problema es pasar una gran cantidad de datos a la excepción, ¿por qué la propiedad 'Mensaje' es de solo lectura? – ControlFlow

+0

nice thoughts about 'StackTrace' ... – ControlFlow

+0

' Message' es la única información no opcional, por lo que tiene sentido ponerla en el constructor. –

Cuestiones relacionadas