산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# - 예외 처리

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

예외는 프로그램의 한 부분에서 다른 부분으로 제어를 전송하는 방법을 제공합니다. C# 예외 처리는 다음 네 가지 키워드를 기반으로 합니다. try , 잡다 , 드디어 , 던지기 .

구문

블록에서 예외가 발생한다고 가정하면 메서드는 try 및 catch 키워드의 조합을 사용하여 예외를 catch합니다. 예외를 생성할 수 있는 코드 주위에 try/catch 블록이 배치됩니다. try/catch 블록 내의 코드를 보호 코드라고 하며 try/catch를 사용하는 구문은 다음과 같습니다. -

try {
   // statements causing exception
} catch( ExceptionName e1 ) {
   // error handling code
} catch( ExceptionName e2 ) {
   // error handling code
} catch( ExceptionName eN ) {
   // error handling code
} finally {
   // statements to be executed
}

다양한 상황에서 try 블록이 둘 이상의 예외를 발생시키는 경우 여러 catch 문을 나열하여 다양한 유형의 예외를 catch할 수 있습니다.

C#의 예외 클래스

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

System.ApplicationException 클래스는 응용 프로그램에서 생성된 예외를 지원합니다. 따라서 프로그래머가 정의한 예외는 이 클래스에서 파생되어야 합니다.

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

다음 표는 Sytem.SystemException 클래스에서 파생된 사전 정의된 예외 클래스 중 일부를 제공합니다 -

시니어 번호 예외 클래스 및 설명
1

System.IO.IO 예외

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

2

System.IndexOutOfRangeException

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

3

System.ArrayTypeMismatchException

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

4

System.NullReferenceException

null 개체를 참조하여 생성된 오류를 처리합니다.

5

System.DivideByZeroException

피제수를 0으로 나눌 때 발생하는 오류를 처리합니다.

6

System.InvalidCastException

typecasting 중 발생하는 오류를 처리합니다.

7

System.OutOfMemoryException

사용 가능한 메모리가 부족하여 발생하는 오류를 처리합니다.

8

System.StackOverflowException

스택 오버플로에서 발생하는 오류를 처리합니다.

예외 처리

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

이러한 오류 처리 블록은 try를 사용하여 구현됩니다. , 잡다 , 그리고 마침내 키워드. 다음은 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

사용자 정의 예외 생성

사용자 고유의 예외를 정의할 수도 있습니다. 사용자 정의 예외 클래스는 예외에서 파생됩니다. 수업. 다음 예는 이것을 보여줍니다 -

라이브 데모
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: Exception {
   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 문을 사용하여 현재 개체를 -

로 throw할 수 있습니다.
Catch(Exception e) {
   ...
   Throw e
}

C 언어

  1. C# 사용
  2. C 파일 처리
  3. try, except 및 finally 문을 사용하는 Python 예외 처리
  4. 자바 예외 처리
  5. C++ 예외 처리:시도, 캐치, 던지기 예제
  6. Python 예외 처리:try, catch, finally 및 제기 [예제]
  7. C++ 신호 처리
  8. 자바 9 - 모듈 시스템
  9. PLC 대 DCS
  10. 유연한 생산을 가능하게 하는 모듈식 팔레트 핸들링 시스템