Compartir a través de


Cómo: Utilizar excepciones específicas en un bloque Catch

Actualización: noviembre 2007

Cuando se produce una excepción, asciende por la pila y se da a cada uno de los bloques Catch la oportunidad de controlarla. El orden de las instrucciones Catch es importante. Ponga los bloques Catch dirigidos a excepciones específicas antes de un bloque Catch de excepción general, pues de lo contrario el compilador puede emitir un error. El bloque Catch adecuado se determina haciendo coincidir el tipo de excepción con el nombre de la excepción especificada en el bloque Catch. Si no hay un bloque Catch específico, un bloque Catch general, si lo hay, detecta la excepción.

En el siguiente ejemplo de código se utiliza un bloque try/catch para detectar una excepción InvalidCastException. En el ejemplo se crea una clase denominada Employee con una única propiedad, el nivel de empleado (Emlevel). Un método, PromoteEmployee, toma un objeto e incrementa el nivel del empleado. Se produce una InvalidCastException cuando se pasa una instancia de DateTime al método PromoteEmployee.

Ejemplo

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);
      }
   }
}

Common Language Runtime detecta las excepciones que no detecta un bloque Catch. Según cómo esté configurado el motor tiempo de ejecución, aparece un cuadro de diálogo de depuración o el programa se deja de ejecutar y aparece un cuadro de diálogo con información de la excepción. Para obtener información sobre la depuración, vea Depurar y generar perfiles de aplicaciones.

Vea también

Tareas

Cómo: Utilizar el bloque Try/Catch para detectar excepciones

Cómo: Iniciar excepciones explícitamente

Cómo: Crear excepciones definidas por el usuario

Cómo: Utilizar bloques Finally

Conceptos

Clase Exception y propiedades

Otros recursos

Fundamentos del control de excepciones