>백엔드 개발 >C#.Net 튜토리얼 >[C# 튜토리얼] C# 예외 처리

[C# 튜토리얼] C# 예외 처리

黄舟
黄舟원래의
2016-12-24 13:35:151243검색

C# 예외 처리

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

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

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.ApplicationException 및 System.SystemException 클래스는 System.Exception 클래스에서 파생된 예외 클래스입니다.

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

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

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

Exception 클래스

설명

System.IO.IOException I/O 오류를 처리합니다.

System.IndexOutOfRangeException 메서드가 범위를 벗어난 배열 인덱스를 가리킬 때 발생하는 오류를 처리합니다.

System.ArrayTypeMismatchException 배열 유형이 일치하지 않을 때 발생하는 오류를 처리합니다.

System.NullReferenceException null 개체에 의존할 때 생성되는 오류를 처리합니다.

System.DivideByZeroException 0으로 나눌 때 발생하는 오류를 처리합니다.

System.InvalidCastException 유형 변환 중에 발생한 오류를 처리합니다.

System.OutOfMemoryException 여유 메모리 부족으로 인해 발생하는 오류를 처리합니다.

System.StackOverflowException 스택 오버플로로 인해 생성된 오류를 처리합니다.

예외 처리

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

이러한 오류 처리 블록은 try, catch 및 finally 키워드를 사용하여 구현됩니다. 다음은 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

사용자 만들기 Custom 예외

자신만의 예외를 정의할 수도 있습니다. 사용자 정의 예외 클래스는 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

객체를 던집니다

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

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

 以上就是【c#教程】C# 异常处理的内容,更多相关内容请关注PHP中文网(www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.