다음을 통해 공유


방법: Catch 블록에 특정 예외 사용

발생한 예외는 스택으로 전달되므로 각 catch 블록은 예외를 처리할 수 있게 됩니다. catch 문의 순서는 중요합니다. 일반적인 예외 catch 블록 앞에 특정 예외를 대상으로 하는 catch 블록을 지정하지 않으면 컴파일러에서 오류가 발생할 수 있습니다. 적합한 catch 블록이 결정되는 방식은 예외 유형을 catch 블록에 지정된 예외의 이름과 대응시키는 것입니다. 특정 catch 블록이 없으면 예외는 일반적인 catch 블록(있는 경우)에 의해 catch됩니다.

다음 코드 예제에서는 try/catch 블록을 사용하여 InvalidCastException을 catch합니다. 이 예제에서는 직급(Emlevel) 속성 하나만을 가지는 Employee라는 클래스를 만듭니다. PromoteEmployee 메서드는 개체를 받아서 직급을 증가시킵니다. DateTime 인스턴스가 PromoteEmployee 메서드로 전달되면 InvalidCastException이 발생합니다.

예제

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

공용 언어 런타임에서는 catch 블록으로 catch되지 않는 예외를 catch합니다. 런타임의 구성 상태에 따라 디버그 대화 상자가 나타나거나 프로그램 실행이 중단되고 예외 정보가 표시된 대화 상자가 나타납니다. 디버깅에 대한 자세한 내용은 응용 프로그램 디버깅 및 프로파일링을 참조하십시오.

참고 항목

작업

방법: Try/Catch 블록을 사용하여 예외 catch

방법: 명시적으로 예외 Throw

방법: 사용자 정의 예외 만들기

방법: Finally 블록 사용

개념

Exception 클래스 및 속성

기타 리소스

예외 처리 기본 사항