2011-08-01 3 views

답변

4

Yes, they should.

당신은 예외가 항상이 자신의 코드에 의해 잡힐 것 알고 경우

는, 다음은 internal하기 위해 OK입니다.

+0

하지만이 페이지는 OP의 주장의 일부인 "개인적으로 만 예외가 사용 된 것이 확실합니다"라는 경우 해당 규칙을 억제해도 괜찮습니다. – Sven

+0

사실 : 원인 절에 "비공개 예외는 ** Exception, SystemException 또는 ApplicationException에서 ** 직접 파생됩니다." – Vlad

0

범위 지정과 동일합니다. 모든 것이 적절한 범위에 있어야합니다.

특정 클래스에서 예외를 만들고 클래스 내에서만 해당 예외를 사용하는 경우 클래스 내에 범위가 있어야하므로 비공개이어야합니다. 그러나 이것은 일반적이지 않습니다.

두 번째 예외는 클래스를 호출하는 다른 개체에 전달 될 것이므로 공개해야합니다. 이것은 가장 일반적으로 사용되는 예외이므로 대부분의 예외는 공개되어야합니다.

4

사실, 인터페이스의 일부가 아닌 경우 내부 예외가 발생하는 것은 아무런 문제가 없습니다. 그

  • 예외 중 하나가 절대적으로 모듈의 경계,
  • 을 통과해서는 안 또는 모듈의 사용자가 잡을 수있는 공공 기반 예외를 제공하지만 이것은 의미한다.

실제로 모듈의 공개 기본 예외 유형을 선언하면 사용자가 언제든지 catch 절에 의존 할 수 있습니다. 기본 클래스에서 파생 된 개별 예외는 원하는 경우 공개 일 수 있지만 좋지 않을 수 있습니다.

평범한 리플렉션으로 쉽게 무시할 수 있기 때문에 어떤 종류의 보안을 위해 공개/개인용 메커니즘에 의존해서는 안됩니다.

0

이것을 고려하십시오 ... 얼마나 멀리 체인에 도달 할 예외가 있습니까? public 함수에서 예외가 throw되면 public이되어야합니다.

그렇습니다. 예외가 인 경우 라이브러리 내에서 항상이 잡히거나 던져 지거나 다시 배지되어 다른 것으로 던지지 않는 경우 내부적 일 수 있습니다.

적으로는, 내가이 시나리오 거라고 :

namespace MyAPI 
{ 
    public class PublicException : System.Exception 
    { 
    } 

    // derive my public exceptions from this 
    public class CatchableException : PublicException 
    { 
    } 

    // stuff that should never reach the users of my API 
    internal class InvisibleException : System.Exception 
    { 
    } 
} 

이 방법을, 내 API의 사용자는 내가 던질 어떤 예외를 잡을 수있는 시설이있다. 내부의 것들은 결코 그렇게까지 만들지 않습니다.