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)!