문제

델파이에서는 물체를 구성하는 동안 예외가 있다면 : 할당 된 메모리가 공개되고 예외가 발생합니다. 예를 들어, 다음은 다음과 같습니다 보장 유효한 것을 반환합니다 Camera 물체 또는 예외를 던지십시오 :

Camera c = new Camera();

절대 NULL의 결과 변수를 확인해야했습니다.

Camera c = new Camera();
if (c == null)
   throw new Exception("Error constructing Camera") //waste of time

CLR에서도 마찬가지입니까?

그리고 반환 값이 유효하거나 예외를 던지도록 보장되는 다른 구문 구성이 있습니까?

  • 구조 생성 (예 : 사각형)?
  • 열거 회원을 받고 있습니까?
  • Object.toString ()의 결과?
  • 수학 운영?

수학 수행의 경우 :

Int32 aspect = 1650.0 / 1080.0;
if (aspect == null) 
   throw new Exception("Division of two numbers returned null")
도움이 되었습니까?

해결책

.NET의 생성자는 객체 유형의 널이 아닌 인스턴스를 반환하도록 보장됩니다. 인스턴스인지 아닌지 유효한 유형의 개별 의미에 따라 다릅니다.

생성자에 던져진 예외는 CLR에 의해 임의로 삼키지 않습니다 (사용자 코드는 삼킬 수 있지만). CLR은 다른 방법에서 발생하는 예외와 마찬가지로 예외를 전파하며 물체는 결국 수집됩니다.

당신이 언급 한 다른 경우에 관해서

  • 구조 생성 : 정의에 따른 구조는 결코 무효 일 수 없습니다. 생성자에 던져진 예외는 정상적으로 전파됩니다
  • 열거 회원 얻기 : 열거는 후드 아래의 스트리처 / 값 유형이며 또한 널 null이 아닙니다.
  • Object.toString ()의 결과 : 이것은 슬프게도 널가 될 수 있습니다. 문자열은 참조 유형이며 Tostring 재정의에서 NULL을 반환하는 것이 완벽하게 합법적입니다 (제발하지 마십시오).
  • 수학적 작업 : 프로젝트의 오버플로 설정과 사용중인 특정 유형 (적분 대 부동 소수점)에 크게 의존합니다.

수학적 질문은 거의 자신의 답변을받을 자격이 있습니다. 한편으로는 원시 유형에 대한 수학적 작동의 결과는 결코 무효가되지 않습니다. 그러나 여전히 유효하지 않을 수 있습니다. 예를 들어, 다음 코드는 던지지 않지만 결과가 유효한 지 여부는 특정 시나리오에 크게 의존합니다.

float f1 = 1.0;
float f2 = f1 / 0;

이 시점에서 F2는 실수를 나타내지 않는 매우 구체적인 플로트 값입니다. 유효합니까? 사용 사례에 따라 다릅니다.

다른 팁

예. 이런 식으로 넣고 싶습니다 (AS 불합격 의미 할 수 있습니다 논리적 실패 또한) : 생성자가 예외를 던지지 않으면 반환 값은 비null 따라서 그러한 수표를 수행 할 필요가 없습니다.

구조 생성 (예 : 사각형) : a struct 할 수 없습니다 null 전혀 (Nullable 유형은 완전히 다른 유형으로 간주됩니다 typeof(int?) != typeof(int)). 구조를 위해 생성자를 호출하면 예외를 던지거나 인스턴스를 반환하여 실패합니다.

열거 회원 받기 : an enum 단지 상수 세트입니다. "런타임에 회원을 얻는 것"과 같은 것은 없습니다. 컴파일 시간에 대체됩니다.

결과 Object.ToString(): 다른 방법과 마찬가지로 유효한 값을 반환 할 수 있습니다. string 포함 된 유형 null 또한 예외를 던질 수 있습니다 (이 경우 값을 전혀 반환하지 않습니다).

수학 연산 : 모든 표현식은 값을 반환하거나 예외를 던집니다. 반환 값은 해당 유형의 유효한 값이 될 수 있습니다 (예 : Int32 결코 될 수 없습니다 null).

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