Sdílet prostřednictvím


Postupy: Použít specifické výjimky v bloku Catch

Pokud dojde k výjimce, je přidána na zásobník a každému bloku catch je dána příležitost k jejímu zpracování. Pořadí příkazů catch je důležité. Vložte bloky catch zaměřené na specifické výjimky před bloky catch zpracovávající obecné výjimky, jinak je možné že kompilátor zahlásí chybu. Správný blok catch je určen pomocí porovnání typu výjimky s názvem výjimky uvedeným v bloku catch. Není-li žádný konkrétní blok catch, výjimka je zpracována obecným blokem catch, pokud existuje.

Následující příklad kódu používá blok try/catch k zachycení InvalidCastException. V ukázce je vytvořena třída nazvaná Employee s jedinou vlastností, úroveň zaměstnance (Emlevel). Metoda , PromoteEmployee, přebírá objekt a zvýší úroveň zaměstnance. K InvalidCastException dojde když je instance DateTime předána metodě PromoteEmployee.

Příklad

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

modul CLR (Common Language Runtime) odchytává výjimky, které nejsou odchyceny blokem catch. V závislosti na konfiguraci modulu runtime se buď objeví dialogové okno ladění nebo program zastaví vykonávání a zobrazí se dialogové okno s informacemi o výjimce. Informace o ladění naleznete v tématu Ladění a profilování aplikací.

Viz také

Úkoly

Postupy: Použití bloku Try/Catch pro zachycení výjimek

Postupy: Explicitně vyvolané výjimky

Postupy: Vytvořit uživatelem definované výjimky

Postupy: Použití bloku Finally.

Koncepty

Třída výjimek a vlastnosti

Další zdroje

Základy zpracování výjimek