Compartilhar via


Como: Usar exceções específicas em um bloco Catch

Quando ocorre uma exceção, ela é passada acima na pilha e a cada bloco catch é dada a oportunidade para tratá-lo.A ordem das instruções catch é importante.Coloque blocos catch direcionados para exceções específicas antes de uma exceção geral do bloco catch ou o compilador pode emitir um erro.O bloco catch adequado é determinado ao corresponder o tipo da exceção para o nome da exceção especificada na bloco catch.Se não houver nenhum bloco catch específico, a exceção é detectada por um bloco catch geral, se houver.

O exemplo de código a seguir usa um bloco try/catch para capturar uma InvalidCastException.O exemplo cria uma classe chamada Employee com uma única propriedade, nível do funcionário (Emlevel).Um método , PromoteEmployee, utiliza um objeto e incrementa o nível do funcionário.Uma InvalidCastException ocorre quando uma instância DateTime é passada para o método PromoteEmployee.

Exemplo

Imports System
Public Class Employee
   'Create employee level property.
   
   Public Property Emlevel() As Integer
      Get
         Return emlevel
      End Get
      Set
         emlevel = value
      End Set
   End Property
   Private emlevel As Integer
End Class 'Employee
 
Public Class Ex13
   
   Public Shared Sub PromoteEmployee(emp As [Object])
      'Cast object to Employee.
      Dim e As Employee = CType(emp, Employee)
      ' Increment employee level.
      e.Emlevel = e.Emlevel + 1
   End Sub 'PromoteEmployee
   
   Public Shared Sub Main()
      Try
         Dim o = New Employee()
         Dim newyears As New DateTime(2001, 1, 1)
         'Promote the new employee.
         PromoteEmployee(o)
         'Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
         PromoteEmployee(newyears)
      Catch e As InvalidCastException
         Console.WriteLine(("Error passing data to PromoteEmployee method. " + e))
      End Try
   End Sub 'Main
End Class 'Ex13
using System;
public class Employee
{
   //Create employee level property.
   public int Emlevel
   {
      get
         {
         return(emlevel);
         }
      set
         {
         emlevel = value;
         }
   }
   int emlevel;
}

public class Ex13 
{
   public static void PromoteEmployee(Object emp)
   {
   //Cast object to Employee.
   Employee e = (Employee) emp;
   // Increment employee level.
   e.Emlevel = e.Emlevel + 1;
   }

   public static void Main()
   {
   try
      {
   Object o = new Employee();
   DateTime newyears = new DateTime(2001, 1, 1);
   //Promote the new employee.
   PromoteEmployee(o);
   //Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
   PromoteEmployee(newyears);
      }
   catch (InvalidCastException e)
      {
      Console.WriteLine("Error passing data to PromoteEmployee method. " + e);
      }
   }
}

O Common Language Runtime captura exceções que não são detectadas por um bloco catch.Dependendo de como o tempo de execução é configurado, ou uma caixa de diálogo de depuração aparece, ou o programa para a execução e uma caixa de diálogo com informações da exceção aparece.Para obter informações sobre depuração, consulte Depuração e Criação de Perfis de Aplicativos.

Consulte também

Tarefas

Como: Use o bloco try/catch para interceptar exceções

Como: Lançar exceções explicitamente

Como: Criar exceções definida pelo usuário

Como: Uso Finally bloqueia

Conceitos

Classe Exception e suas Propriedades

Outros recursos

Fundamentos da Manipulação de Exceções