Compartir a través de


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:

  1. Cree una clase serializable que herede de Exception. El nombre de clase debe terminar en "Exception":

    [Serializable]
    public class StudentNotFoundException : Exception { }
    
    <Serializable>
    Public Class StudentNotFoundException
        Inherits Exception
    End Class
    
  2. Agregue los constructores predeterminados:

    [Serializable]
    public class StudentNotFoundException : Exception
    {
        public StudentNotFoundException() { }
    
        public StudentNotFoundException(string message)
            : base(message) { }
    
        public StudentNotFoundException(string message, Exception inner)
            : base(message, inner) { }
    }
    
    <Serializable>
    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
    
  3. Defina cualquier propiedad y constructores adicionales:

    [Serializable]
    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;
        }
    }
    
    <Serializable>
    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:

  1. Cree una carpeta llamada Recursos para contener los archivos de recursos.

  2. 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.

  3. Agregue un par nombre-valor para el mensaje de excepción, como se muestra en la imagen siguiente:

    Add resources to the default culture

  4. Agregue un archivo de recursos nuevo para francés. Asígnele el nombre ExceptionMessages.fr-FR.resx.

  5. Vuelva a agregar un par nombre-valor para el mensaje de excepción, pero con un valor en francés:

    Add resources to the fr-FR culture

  6. 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.

  7. 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 es TestProject.Resources.ExceptionMessages.

Vea también