.NET의 Exception 또는 ApplicationException에서 사용자 지정 예외를 파생해야 합니까?

StackOverflow https://stackoverflow.com/questions/52753

  •  09-06-2019
  •  | 
  •  

문제

.NET 솔루션에서 예외 클래스를 생성할 때 가장 좋은 방법은 무엇입니까?파생하다 System.Exception 또는에서 System.ApplicationException?

도움이 되었습니까?

해결책

프레임워크 디자인 지침 책의 Jeffery Richter에 따르면:

System.ApplicationException .NET Framework의 일부가 되어서는 안 되는 클래스입니다.

잠재적으로 응용 프로그램 예외를 "모든" 포착할 수 있다는 점에서 어느 정도 의미가 있지만 패턴을 따르지 않았으므로 가치가 없습니다.

다른 팁

다음에서 사용자 지정 예외를 파생해야 합니다. System.Exception.

MSDN조차도 이제 무시하라고 말합니다. ApplicationException:

자체 예외를 작성 해야하는 응용 프로그램을 설계하는 경우 예외 클래스에서 사용자 정의 예외를 도출하는 것이 좋습니다.원래 사용자 정의 예외는 ApplicationException 클래스에서 파생되어야한다고 생각되었다.그러나 실제로 이것은 상당한 가치를 더하는 것으로 밝혀지지 않았습니다.자세한 내용은 참조하십시오 예외 처리 모범 사례.

http://msdn.microsoft.com/en-us/library/system.applicationException.aspx

ApplicationException 쓸모없는 것으로 간주 강력하고 비판적인 주장이다. ApplicationException.

결과:그것을 사용하지 마십시오.파생 Exception.

프레임워크 작성자는 ApplicationException을 쓸모없다고 생각합니다.

http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx

여기에 좋은 후속 조치가 있습니다.

http://blogs.msdn.com/kcwalina/archive/2006/07/05/657268.aspx

의심스러울 때는 그들의 책 Framework Design Guideline을 따릅니다.

http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756

블로그 게시물의 주제는 여기에서 더 자세히 논의됩니다.

rp

나는 다음과 같은 일에 익숙합니다.

private void buttonFoo_Click()
{
    try
    {
       foo();
    } 
    catch(ApplicationException ex)
    {
      Log.UserWarning(ex);
      MessageVox.Show(ex.Message);
    }
    catch(Exception ex)
    {
       Log.CodeError(ex);
       MessageBox.Show("Internal error.");
    }
}

다음의 차이점을 수행할 수 있습니다.

  • 복구해야 하는 C# 코드 시스템 오류입니다.
  • 제가 정정할 필요가 없는 "일반" 사용자 오류입니다.

ApplicationException을 사용하는 것이 권장되지 않는다는 것을 알고 있지만 다음과 같은 기능이 있으므로 훌륭하게 작동합니다. 수업이 거의 없음 ApplicationException 패턴을 존중하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top