다음을 통해 공유


catch 블록에서 특정 예외를 사용하는 방법

일반적으로 기본 catch 문을 사용하기보다는 특정 유형의 예외를 잡는 것이 좋은 프로그래밍 습관입니다.

예외가 발생하면 스택을 따라 전달되며 각 catch 블록은 그것을 처리할 기회를 갖습니다. catch 문의 순서가 중요합니다. 특정 예외를 대상으로 하는 catch 블록을 일반적인 예외 catch 블록 앞에 배치하지 않으면 컴파일러가 오류를 발생시킬 수 있습니다. 적절한 catch 블록은 예외의 형식을 catch 블록에 지정된 예외의 이름과 일치시켜 결정됩니다. 특정 catch 블록이 없으면, 일반 catch 블록이 존재할 경우 그 블록에 의해 예외가 처리됩니다.

다음 코드 예제에서는 try/catch 블록을 사용하여 InvalidCastException을(를) 포착합니다. 샘플은 직원 수준(Employee)이라는 단일 속성을 가진 Emlevel 클래스를 만듭니다. 메서드는 PromoteEmployee개체를 사용하고 직원 수준을 증가합니다. InvalidCastException 인스턴스가 DateTime 메서드에 전달될 때 PromoteEmployee 발생합니다.

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.
        var e = (Employee) emp;
        // Increment employee level.
        e.Emlevel = e.Emlevel + 1;
    }

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

참고하십시오