Como ya se ha dicho, todas las
excepciones derivan de un tipo predefinido en la BCL llamado System.Exception.
Los principales miembros que heredan de éste son:
- string Message {virtual get;}:
Contiene un mensaje descriptivo de las causas de la excepción. Por defecto
este mensaje es una cadena vacía (“”)
- Exception InnerException {virtual
get;}: Si una excepción fue causada como consecuencia de otra,
esta propiedad contiene el objeto System.Exception que
representa a la excepción que la causó. Así se pueden formar cadenas de
excepciones de cualquier longitud. Si se desea obtener la última excepción
de la cadena es mejor usar el método virtual Exception
GetBaseException()
- string StackTrace {virtual get;}:
Contiene la pila de llamadas a métodos que se tenía en el momento en que
se produjo la excepción. Esta pila es una cadena con información sobre
cuál es el método en que se produjo la excepción, cuál es el método que
llamó a este, cuál es el que llamó a ese otro, etc.
- string Source {virtual get;
virtual set;}: Almacena información sobre cuál fue la
aplicación u objeto que causó la excepción.
- MethodBase TargetSite {virtual
get;}: Almacena cuál fue el método donde se produjo la
excepción en forma de objeto System.Reflection.MethodBase.
Puede consultar la documentación del SDK si desea cómo obtener información
sobre las características del método a través del objeto MethodBase.
- string HelpLink {virtual get;}:
Contiene una cadena con información sobre cuál es la URI donde se puede
encontrar información sobre la excepción. El valor de esta cadena puede
establecerse con virtual Exception SetHelpLink
(string URI), que devuelve la excepción sobre la que se aplica
pero con la URI ya actualizada.
Para crear objetos de clase System.Exception
se puede usar los constructores:
Exception()
Exception(string
msg)
Exception(string
msg, Exception causante)
El primer constructor crea una
excepción cuyo valor para Message será “” y no causada por ninguna otra excepción (InnerException
valdrá null)
El segundo la crea con el valor indicado para Message, y el último
la crea con además la excepción causante indicada.
En la práctica, cuando se crean
nuevos tipos derivados de System.Exception no se suele redefinir sus
miembros ni añadirles nuevos, sino que sólo se hace la derivación para
distinguir una excepciones de otra por el nombre del tipo al que pertenecen.
Ahora bien, es conveniente respetar el convenio de darles un nombre acabado en Exception y
redefinir los tres constructores antes comentados.