A veces se desea ocultar los detalles de implementación de un método o mejorar el nivel de abstracción de un problema por lo que es más significativo para la persona que llama de un método. Para hacer esto, puede interceptar la excepción original y sustituir por una excepción personalizada que sea más adecuada para explicar el problema.
Tomemos por ejemplo un método que carga los detalles del usuario solicitado de un archivo de texto. El método supone que existe un archivo de texto con el nombre del ID del usuario y un sufijo de ".data". Cuando ese archivo no existe realmente, no tiene mucho sentido lanzar una excepción FileNotFoundException porque el hecho de que los detalles de cada usuario están almacenados en un archivo de texto es un detalle de implementación interno del método. Entonces, este método podría envolver la excepción original en una excepción personalizada con un mensaje explicativo.
A diferencia del código que se muestra, la práctica recomendada es mantener la excepción original cargándola como la propiedad InnerException de su nueva excepción. Esto significa que un desarrollador aún puede analizar el problema subyacente si es necesario.
Al crear una excepción personalizada, he aquí una lista útil:
• Encontrar un buen nombre que transmite la razón por la excepción fue lanzada y asegúrese de que el nombre termina con la palabra “excepción”.
• Asegúrese de implementar los tres constructores estándar de excepciones.
• Asegúrese de marcar su excepción con el atributo Serializable.
• Asegúrese de implementar el constructor de deserialización.
• Agregue cualquier propiedad de excepción personalizada que pueda ayudar a los desarrolladores a comprender y manejar mejor su excepción.
• Si agrega propiedades personalizadas, asegúrese de implementar y anular GetObjectData para serializar sus propiedades personalizadas.
• Si agrega propiedades personalizadas, anule la propiedad Mensaje para que pueda agregar sus propiedades al mensaje de excepción estándar.
• Recuerde adjuntar la excepción original utilizando la propiedad InnerException de su excepción personalizada.
¿Entiendo bien, no hay necesidad de manejar una excepción relanzada? – chester89
Lo que quiero decir es esto: si tiene un fragmento de código que no puede tratar con una excepción (es decir, desea que la persona que llama lo maneje), tiene dos opciones: 1. no captarlo; 2. atraparlo, registrarlo en algún lugar, luego volver a lanzarlo. Al volver a tirar, le parece a la persona que llama como si nunca hubiera sido atrapada. –