다음을 통해 공유


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

업데이트: 2007년 11월

발생한 예외는 스택으로 전달되므로 각 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 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);
      }
   }
}

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

참고 항목

작업

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

방법: 명시적으로 예외 Throw

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

방법: Finally 블록 사용

개념

Exception 클래스 및 속성

기타 리소스

예외 처리 기본 사항