C# 튜토리얼login
C# 튜토리얼
작가:php.cn  업데이트 시간:2022-04-11 14:06:23

C# 예외 처리



예외는 프로그램 실행 중에 발생하는 문제입니다. C#의 예외는 0으로 나누려는 시도와 같이 프로그램이 실행되는 동안 발생하는 특별한 상황에 대한 응답입니다.

예외는 프로그램 제어권을 한 부분에서 다른 부분으로 이전하는 방법을 제공합니다. C# 예외 처리는 try, catch, finallythrow라는 네 가지 키워드를 기반으로 합니다.

  • try: try 블록은 특정 예외를 발생시키는 코드 블록을 식별합니다. 그 뒤에는 하나 이상의 catch 블록이 옵니다.

  • catch: 프로그램은 예외 처리기를 통해 예외를 포착합니다. catch 키워드는 예외 포착을 나타냅니다.

  • finally: finally 블록은 예외 발생 여부에 관계없이 주어진 명령문을 실행하는 데 사용됩니다. 예를 들어, 파일을 열면 예외 발생 여부에 관계없이 파일이 닫힙니다.

  • throw: 문제가 발생하면 프로그램에서 예외가 발생합니다. 이를 수행하려면 throw 키워드를 사용하세요.

구문

블록이 예외를 발생시키고 메소드가 try 및 catch 키워드를 사용하여 예외를 포착한다고 가정합니다. try/catch 블록 내의 코드는 보호된 코드입니다. 다음과 같이 try/catch 구문을 사용하세요.

try
{
   // 引起异常的语句
}
catch( ExceptionName e1 )
{
   // 错误处理代码
}
catch( ExceptionName e2 )
{
   // 错误处理代码
}
catch( ExceptionName eN )
{
   // 错误处理代码
}
finally
{
   // 要执行的语句
}

다양한 상황에서 try 블록이 여러 예외를 생성하지 않도록 다양한 유형의 예외를 캡처하는 여러 catch 문을 나열할 수 있습니다. 예외.

C#의 예외 클래스

C# 예외는 클래스로 표시됩니다. C#의 예외 클래스는 주로 System.Exception 클래스에서 직접 또는 간접적으로 파생됩니다. System.ApplicationExceptionSystem.SystemException 클래스는 System.Exception 클래스에서 파생된 예외 클래스입니다.

System.ApplicationException 클래스는 애플리케이션에서 생성된 예외를 지원합니다. 따라서 프로그래머가 정의한 모든 예외는 이 클래스에서 파생되어야 합니다.

System.SystemException 클래스는 미리 정의된 모든 시스템 예외의 기본 클래스입니다.

다음 표에는 Sytem.SystemException 클래스에서 파생된 미리 정의된 일부 예외 클래스가 나열되어 있습니다.

Exception 클래스 Description
System.IO.IOExceptionI/O 오류를 처리합니다.
System.IndexOutOfRangeException메서드가 범위를 벗어난 배열 인덱스를 가리킬 때 발생하는 오류를 처리합니다.
System.ArrayTypeMismatchException 배열 유형이 일치하지 않을 때 생성되는 오류를 처리합니다.
System.NullReferenceException null 개체에 의존할 때 생성되는 오류를 처리합니다.
System.DivideByZeroException 0으로 나눌 때 발생하는 오류를 처리합니다.
System.InvalidCastException 유형 캐스팅 중에 생성된 오류를 처리합니다.
System.OutOfMemoryException사용 가능한 메모리 부족으로 인해 발생하는 오류를 처리합니다.
System.StackOverflowException은 스택 오버플로로 인해 생성된 오류를 처리합니다.

예외 처리

C#은 try 및 catch 블록 형태로 구조화된 예외 처리 솔루션을 제공합니다. 이러한 블록을 사용하여 핵심 프로그램 명령문을 오류 처리 명령문과 분리합니다.

이러한 오류 처리 블록은 try, catchfinally 키워드를 사용하여 구현됩니다. 다음은 0으로 나눌 때 발생하는 예외의 예입니다.

using System;
namespace ErrorHandlingApplication
{
    class DivNumbers
    {
        int result;
        DivNumbers()
        {
            result = 0;
        }
        public void division(int num1, int num2)
        {
            try
            {
                result = num1 / num2;
            }
            catch (DivideByZeroException e)
            {
                Console.WriteLine("Exception caught: {0}", e);
            }
            finally
            {
                Console.WriteLine("Result: {0}", result);
            }

        }
        static void Main(string[] args)
        {
            DivNumbers d = new DivNumbers();
            d.division(25, 0);
            Console.ReadKey();
        }
    }
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Exception caught: System.DivideByZeroException: Attempted to divide by zero. 
at ...
Result: 0

사용자 정의 예외 만들기

예외를 직접 정의할 수도 있습니다. 사용자 정의 예외 클래스는 ApplicationException 클래스에서 파생됩니다. 다음 예에서는 이를 보여줍니다.

using System;
namespace UserDefinedException
{
   class TestTemperature
   {
      static void Main(string[] args)
      {
         Temperature temp = new Temperature();
         try
         {
            temp.showTemp();
         }
         catch(TempIsZeroException e)
         {
            Console.WriteLine("TempIsZeroException: {0}", e.Message);
         }
         Console.ReadKey();
      }
   }
}
public class TempIsZeroException: ApplicationException
{
   public TempIsZeroException(string message): base(message)
   {
   }
}
public class Temperature
{
   int temperature = 0;
   public void showTemp()
   {
      if(temperature == 0)
      {
         throw (new TempIsZeroException("Zero Temperature found"));
      }
      else
      {
         Console.WriteLine("Temperature: {0}", temperature);
      }
   }
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

TempIsZeroException: Zero Temperature found

Throw object

예외가 System.Exception 클래스에서 직접 또는 간접적으로 파생되는 경우 다음을 수행할 수 있습니다. 물건을 던집니다. 다음과 같이 catch 블록 내에서 throw 문을 사용하여 현재 개체를 던질 수 있습니다.

Catch(Exception e)
{
   ...
   Throw e
}

PHP 중국어 웹사이트