Creación de excepciones definidas por el usuario con mensajes de excepción localizados
En este artículo, obtendrá información sobre cómo crear excepciones definidas por el usuario que se hereden de la clase base Exception con mensajes de excepción localizados mediante ensamblados satélite.
Creación de excepciones personalizadas
.NET contiene muchas excepciones distintas que puede usar. Sin embargo, en algunos casos, cuando ninguna de ellas satisface sus necesidades, puede crear sus propias excepciones personalizadas.
Supongamos que desea crear un StudentNotFoundException
que contiene una propiedad StudentName
.
Para crear una excepción personalizada, siga estos pasos:
Cree una clase que herede de Exception. El nombre de clase debe terminar en "Exception":
public class StudentNotFoundException : Exception { }
Public Class StudentNotFoundException Inherits Exception End Class
Agregue los constructores predeterminados:
public class StudentNotFoundException : Exception { public StudentNotFoundException() { } public StudentNotFoundException(string message) : base(message) { } public StudentNotFoundException(string message, Exception inner) : base(message, inner) { } }
Public Class StudentNotFoundException Inherits Exception Public Sub New() End Sub Public Sub New(message As String) MyBase.New(message) End Sub Public Sub New(message As String, inner As Exception) MyBase.New(message, inner) End Sub End Class
Defina cualquier propiedad y constructores adicionales:
public class StudentNotFoundException : Exception { public string StudentName { get; } public StudentNotFoundException() { } public StudentNotFoundException(string message) : base(message) { } public StudentNotFoundException(string message, Exception inner) : base(message, inner) { } public StudentNotFoundException(string message, string studentName) : this(message) { StudentName = studentName; } }
Public Class StudentNotFoundException Inherits Exception Public ReadOnly Property StudentName As String Public Sub New() End Sub Public Sub New(message As String) MyBase.New(message) End Sub Public Sub New(message As String, inner As Exception) MyBase.New(message, inner) End Sub Public Sub New(message As String, studentName As String) Me.New(message) StudentName = studentName End Sub End Class
Creación de mensajes de excepción localizados
Creó una excepción personalizada y puede iniciarla en cualquier parte con código como el siguiente:
throw new StudentNotFoundException("The student cannot be found.", "John");
Throw New StudentNotFoundException("The student cannot be found.", "John")
El problema con la línea anterior es que "The student cannot be found."
es simplemente una cadena constante. En una aplicación localizada, quiere tener mensajes diferentes en función de la referencia cultural del usuario.
Los ensamblados satélite son una buena manera de hacerlo. Un ensamblado satélite es un archivo DLL que contiene recursos para un idioma específico. Cuando se solicitan recursos específicos en tiempo de ejecución, el CLR encuentra ese recurso en función de la referencia cultural del usuario. Si no se encuentra ningún ensamblado satélite para esa referencia cultural, se usan los recursos de la referencia cultural predeterminada.
Para crear los mensajes de excepción localizados:
Cree una carpeta llamada Recursos para contener los archivos de recursos.
Agréguele un archivo de recursos nuevo. Para ello, en Visual Studio, haga clic con el botón derecho en la carpeta en el Explorador de soluciones y seleccione Agregar>Nuevo elemento>Archivo de recursos. Asígnele al archivo el nombre ExceptionMessages.resx. Este es el archivo de recursos predeterminado.
Agregue un par nombre-valor para el mensaje de excepción, como se muestra en la imagen siguiente:
Agregue un archivo de recursos nuevo para francés. Asígnele el nombre ExceptionMessages.fr-FR.resx.
Vuelva a agregar un par nombre-valor para el mensaje de excepción, pero con un valor en francés:
Después de compilar el proyecto, la carpeta de la salida de compilación debe contener la carpeta fr-FR con un archivo .dll, que es el ensamblado satélite.
Inicia la excepción con código como el siguiente:
var resourceManager = new ResourceManager("FULLY_QUALIFIED_NAME_OF_RESOURCE_FILE", Assembly.GetExecutingAssembly()); throw new StudentNotFoundException(resourceManager.GetString("StudentNotFound"), "John");
Dim resourceManager As New ResourceManager("FULLY_QUALIFIED_NAME_OF_RESOURCE_FILE", Assembly.GetExecutingAssembly()) Throw New StudentNotFoundException(resourceManager.GetString("StudentNotFound"), "John")
Nota
Si el nombre del proyecto es
TestProject
y el archivo de recursos ExceptionMessages.resx reside en la carpeta Recursos del proyecto, el nombre completo del archivo de recursos esTestProject.Resources.ExceptionMessages
.