Partilhar via


Como criar exceções definidas pelo usuário com mensagens de exceção localizadas

Neste artigo, você aprenderá a criar exceções definidas pelo usuário que são herdadas da classe base Exception com mensagens de exceção localizadas usando assemblies satélite.

Criar exceções personalizadas

O .NET contém muitas exceções diferentes que você pode usar. No entanto, nos casos em que nenhum deles atende às suas necessidades, você pode criar sua própria exceção personalizada.

Vamos supor que você queira criar um StudentNotFoundException que contenha uma StudentName propriedade. Para criar uma exceção personalizada, siga estas etapas:

  1. Crie uma classe que herda do Exception. O nome da classe deve terminar em "Exceção":

    public class StudentNotFoundException : Exception { }
    
    Public Class StudentNotFoundException
        Inherits Exception
    End Class
    
  2. Adicione os construtores padrão:

    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
    
  3. Defina quaisquer propriedades e construtores adicionais:

    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
    

Criar mensagens de exceção localizadas

Você criou uma exceção personalizada e pode lançá-la em qualquer lugar com um código como o seguinte:

throw new StudentNotFoundException("The student cannot be found.", "John");
Throw New StudentNotFoundException("The student cannot be found.", "John")

O problema com a linha anterior é que "The student cannot be found." é apenas uma cadeia de caracteres constante. Em um aplicativo localizado, você deseja ter mensagens diferentes, dependendo da cultura do usuário. As montagens de satélite são uma boa maneira de fazer isso. Um assembly satélite é uma DLL que contém recursos para um idioma específico. Quando você solicita um recurso específico em tempo de execução, o CLR localiza esse recurso dependendo da cultura do usuário. Se nenhum assembly satélite for encontrado para essa cultura, os recursos da cultura padrão serão usados.

Para criar as mensagens de exceção localizadas:

  1. Crie uma nova pasta chamada Recursos para armazenar os arquivos de recursos.

  2. Adicione um novo arquivo de recurso a ele. Para fazer isso no Visual Studio, clique com o botão direito do mouse na pasta no Gerenciador de Soluções e selecione Adicionar>Novo Arquivo de Recursos de Item.> Nomeie o arquivo ExceptionMessages.resx. Este é o arquivo de recursos padrão.

  3. Adicione um par nome/valor para sua mensagem de exceção, como mostra a imagem a seguir:

    Adicionar recursos à cultura padrão

  4. Adicione um novo arquivo de recurso para francês. Nomeie-o ExceptionMessages.fr-FR.resx.

  5. Adicione um par nome/valor para a mensagem de exceção novamente, mas com um valor francês:

    Adicionar recursos à cultura fr-FR

  6. Depois de construir o projeto, a pasta de saída da compilação deve conter a pasta fr-FR com um arquivo .dll , que é o assembly satélite.

  7. Você lança a exceção com um código como o seguinte:

    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

    Se o nome do projeto for TestProject e o arquivo de recurso ExceptionMessages.resx residir na pasta Recursos do projeto, o nome totalmente qualificado do arquivo de recurso será TestProject.Resources.ExceptionMessages.

Consulte também