Comment : utiliser des exceptions spécifiques dans un bloc catch

Lorsqu'une exception se produit, elle remonte la pile et chaque bloc catch a la possibilité de la traiter. L'ordre des instructions catch est important. Placez les blocs catch ciblés pour des exceptions spécifiques avant un bloc catch d'exception général, sinon le compilateur pourrait émettre une erreur. Le bloc catch approprié est déterminé par la mise en correspondance du type de l'exception et du nom de l'exception spécifié dans le bloc catch. Si aucun bloc catch spécifique n'existe, l'exception est interceptée par un bloc catch général, le cas échéant.

L'exemple de code suivant utilise un bloc try/catch pour intercepter une exception InvalidCastException. L'exemple crée une classe appelée Employee avec une propriété unique pour le niveau de l'employé (Emlevel). Une méthode, PromoteEmployee, prend un objet et incrément le niveau de l'employé. Une exception InvalidCastException se produit quand une instance DateTime est passée à la méthode PromoteEmployee.

Exemple

Imports System

Public Class Employee
    'Create employee level property.
    Public Property Emlevel As Integer
        Get
            Return emlevelValue
        End Get
        Set
            emlevelValue = Value
        End Set
    End Property

    Private emlevelValue As Integer = 0
End Class

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

    Public Shared Sub Main()
        Try
            Dim o As Object = 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.Message)
        End Try
    End Sub
End Class
using System;

public class Employee
{
    //Create employee level property.
    public int Emlevel
    {
        get
        {
            return(emlevel);
        }
        set
        {
            emlevel = value;
        }
    }

    private int emlevel = 0;
}

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.Message);
        }
    }
}
using namespace System;

public ref class Employee
{
public:
    Employee()
    {
        emlevel = 0;
    }

    //Create employee level property.
    property int Emlevel
    {
        int get()
        {
            return emlevel;
        }
        void set(int value)
        {
            emlevel = value;
        }
    }

private:
    int emlevel;
};

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

    static void Main()
    {
        try
        {
            Object^ o = gcnew Employee();
            DateTime^ newyears = gcnew 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->Message);
        }
    }
};

int main()
{
    Ex13::Main();
}

Le Common Language Runtime intercepte des exceptions qui ne sont pas interceptées par un bloc catch. Selon la configuration du runtime, une boîte de dialogue de débogage apparaît ou l'exécution du programme s'arrête et une boîte de dialogue contenant des informations sur les exceptions s'ouvre. Pour des informations sur le débogage, consultez Débogage et profilage d'applications.

Voir aussi

Tâches

Comment : utiliser le bloc try/catch pour intercepter des exceptions

Comment : lever explicitement des exceptions

Comment : créer des exceptions définies par l'utilisateur

Comment : utiliser des blocs finally

Concepts

Classe et propriétés d'exception

Autres ressources

Notions de base de la gestion des exceptions