나는 그것이 a good thing to always make exceptions serializable이라는 것을 알고 있습니다. 그러나 나는 또한 항상 공개해야합니까? 내부적으로 만 붙잡아 야한다고해도? 예외가 공개되지 않은 경우 잠재적으로 보안 문제 또는 직렬화 문제 (예 : appdomains 전체에 마샬링)가 있는지 궁금합니다.예외는 항상 공개되어야합니다
4
A
답변
4
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의 사용자는 내가 던질 어떤 예외를 잡을 수있는 시설이있다. 내부의 것들은 결코 그렇게까지 만들지 않습니다.
관련 문제
- 1. 던지기 예외는 항상 같은 메시지를 준다.
- 2. 예외는
- 3. 이상한 예외는()
- 4. Nullpointer 예외는
- 5. 추적 예외는
- 6. 예외는 Rijndael을
- 7. 모든 예외는 404.html에 매핑되며 예외는 500.html에 매핑됩니다
- 8. 예외는 별도의 패키지에 넣어야합니까?
- 9. 소켓 예외는 제이 보스
- 10. 이상한 예외는 무엇입니까?
- 11. Silverlight 초기화시 예외는 무엇입니까?
- 12. 시스템은 프로세스에 지정된 예외는
- 13. C# 여기서 예외는 무엇입니까?
- 14. .NET 예외는 얼마나 느립니까?
- 15. 홀수 예외는 .NET
- 16. vb.net에서 StackOverFlow 예외는 무엇입니까?
- 17. 전역 예외는 어떻게 catch합니까?
- 18. iPhone에 선을 그립니다. 예외는
- 19. 이 예외는 무엇을 의미합니까?
- 20. 액티브 예외는 구출하지
- 21. 오라클 예외는 PHP 경고로 표시되지 않습니다.
- 22. 이 스레드/페인트 예외는 무엇입니까?
- 23. 잡힌 잡히지 않은 예외는 로깅합니까?
- 24. Java LinkageError 예외는 어떻게 수정합니까?
- 25. 이름을 찾을 수 없습니다 예외는
- 26. 레이즈가있는 예외는 어떤 용도로 사용합니까?
- 27. Python/django 예외는 얼마나 느립니까?
- 28. 검사되지 않은 예외는 사용자에게보고되는 방법
- 29. 데이터베이스 모델의 예외는 어떻게 처리합니까?
- 30. 예외는 Distinct와 비슷한 효과가 있습니까?
하지만이 페이지는 OP의 주장의 일부인 "개인적으로 만 예외가 사용 된 것이 확실합니다"라는 경우 해당 규칙을 억제해도 괜찮습니다. – Sven
사실 : 원인 절에 "비공개 예외는 ** Exception, SystemException 또는 ApplicationException에서 ** 직접 파생됩니다." – Vlad