관리 메뉴

IT & Life

C#에서 사용자 지정 예외 클래스를 구현하는 방법 본문

프로그래밍/ASP.NET & C#

C#에서 사용자 지정 예외 클래스를 구현하는 방법

미운앙마 2017. 12. 3. 01:06

https://www.infoworld.com/article/3010009/application-development/how-to-implement-a-custom-exception-class-in-c.html#tk.ifw_nsdr_ndxprmomod

 

 

 

C#에서 사용자 지정 예외 클래스를 구현하는 방법

사용자 정의 예외 클래스를 활용하여 오류 처리를 확장하거나 .Net 응용 프로그램에서 발생하는 오류에 의미있는 정보를 추가하십시오.

 

 


예외는 런타임에 발생하는 오류이며 제대로 처리되지 않으면 프로그램 실행의 정상적인 흐름을 종료합니다. 예외가 발생하면 실제 스택 추적 또는 예외 메시지를 사용자에게 표시하지 않을 수 있습니다. 사용자 정의 예외는 프로그램 실행 중 오류가 발생할 때 예외에 명확하고 의미 있고 사용자에게 친숙한 정보를 추가하는 데 사용할 수 있습니다.

 

.Net의 모든 예외에 대한 기본 클래스입니다 Exception. 예외 계층 구조의 모든 클래스는이 클래스에서 직접 또는 간접적으로 파생됩니다. the System.ApplicationException및 System.SystemExceptionclass는 클래스를 확장하며 System.Exception클래스 는 클래스에서 파생됩니다 System.Object. 예외는 .Net의 다른 유형과 같습니다.

 


ApplicationException과 System.Exception 비교

 

사용자 정의 예외 클래스를 작성하려면 유형을 정의해야합니다. 사용자 정의 예외 클래스를 설계 할 때, 당신은에서 클래스를 파생해야 System.Exception부터하지 ApplicationException. ApplicationException원래 사용자 정의 예외를 작성하는 데 사용하기위한 것이었지만 더 이상 사용하지 않는 것이 좋습니다. Microsoft의 설명서에서 다음 과 같이 설명합니다 .

 

Exception 클래스가 아닌 클래스  에서 사용자 정의 예외를 파생시켜야합니다  ApplicationException . ApplicationException 코드에 예외를 던져서는  안되며 ApplicationException 원래의 예외를 다시 던지려하지 않는 한 예외를 잡아서는 안됩니다  .


ApplicationException사용되지 않는 것은 예외 계층을 불필요하게 확장한다는 이유 입니다. ApplicationException클래스가 클래스를 확장 하더라도 Exception새 기능을 추가하지는 않습니다. 유일한 목적은 응용 프로그램에서 정의한 예외와 시스템에서 정의한 예외를 구별 할 수있는 방법을 제공하는 것이 었습니다. 

 

 

사용자 정의 예외 클래스 설계

 

이제 코드를 살펴 보겠습니다. 다음 코드 조각은 클래스를 파생하여 C #에서 사용자 지정 예외 클래스를 만드는 방법을 보여줍니다 System.Exception. 사용자 정의 예외 클래스에 의미있는 이름을 제공해야합니다. 이 예에서는 LoginException, 사용자 자격 증명이 잘못된 경우와 같이 사용자가 시스템에 로그인 할 때 발생할 수있는 오류를 잡는 데 사용할 수 있는 사용자 정의 예외 클래스를 만듭니다 .

 

public class LoginException : System.Exception
    {
       //TODO
    }

다음 코드 목록은 기본 및 인수 생성자가 구현 된 사용자 정의 예외 클래스를 보여줍니다.

 

public class LoginException : System.Exception
    {
        /// <summary>
        /// Default constructor
        /// </summary>
        public LoginException() : base()
        {
        }
        /// <summary>
        /// Argument constructor
        /// </summary>
        /// <param name="message">This is the description of the exception</param>
        public LoginException(String message) : base(message)
        {
        }
        /// <summary>
        /// Argument constructor with inner exception
        /// </summary>
        /// <param name="message">This is the description of the exception</param>
        /// <param name="innerException">Inner exception</param>
        public LoginException(String message, Exception innerException) : base(message, innerException)
        {
        }
        /// <summary>
        /// Argument constructor with serialization support
        /// </summary>
        /// <param name="info">Instance of SerializationInfo</param>
        /// <param name="context">Instance of StreamingContext</param>
        protected LoginException(SerializationInfo info, StreamingContext context) : base(info, context)
        {
        }
    }

LoginException클래스 의 생성자에있는 매개 변수의 사용법 과 기본 클래스 생성자가 호출되는 방법에 유의하십시오 . 또한 직렬화 지원을 제공하기 위해 마지막 인수 생성자가 어떻게 사용되는지 주목하십시오.

 

 

사용자 정의 예외 클래스 사용

 

다음 코드 목록은 LoginException방금 구현 한 클래스를 사용하는 방법을 보여줍니다 .

 

static void Main(string[] args)
        {
            try
            {
                //Write code here to login the user.
                //If the provided credentials are invalid
                //an exception object is thrown.
          throw new LoginException(“Invalid credentials provided...”);
            }
            catch(LoginException loginException)
            {
                //Write code here to handle the exception
                Console.WriteLine(loginException.Message);
            }
            Console.Read();
        }

     
응용 프로그램의 예외 처리에 더 많은 기능을 추가하려는 경우 또는 사용자에게 추가 정보를 제공하는 것이 의미가있는 경우에만 사용자 지정 예외 클래스를 구현해야합니다. 대부분의 경우, 표준 예외에 의존하기를 원할 것입니다. Net은 당신을 제공합니다.

Comments