.NET 프리미티브 및 유형 계층 구조, 왜 이렇게 설계되었나요?

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

  •  16-09-2019
  •  | 
  •  

문제

.NET에 왜 9개의 정수 유형이 있는지 알고 싶습니다. Char, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, 그리고 UInt64;기타 숫자 유형: Single, Double, Decimal;이 모든 유형은 전혀 관련이 없습니다.

처음 C#으로 코딩을 시작했을 때 "멋지네요. uint 유형, 음수 값이 허용되지 않을 때 사용하겠습니다."그런 다음 API가 사용되지 않는다는 것을 깨달았습니다. uint 하지만 int 대신에, 그리고 그거 uint 에서 파생되지 않습니다 int, 그래서 변환이 필요했습니다.

이러한 유형의 실제 적용은 무엇입니까?대신에 integer 그리고 positiveInteger ?제가 이해할 수 있는 유형들입니다.사람의 나이(세)는 positiveInteger, 이후 positiveInteger 의 하위 집합입니다 integer 언제든지 변환이 필요합니다 integer 예상됩니다.

다음은 XPath 2.0 및 XQuery 1.0의 유형 계층 구조에 대한 다이어그램입니다.아래를 보면 xs:anyAtomicType 숫자 계층 구조를 볼 수 있습니다 decimal > integer > long > int > short > byte..NET이 이렇게 설계되지 않은 이유는 무엇입니까?새로운 프레임워크 "Oslo"는 다를까요?

alt text

도움이 되었습니까?

해결책

내 추측은 기본 하드웨어가 해당 클래스 계층 구조를 깨뜨리기 때문입니다. 당신이 UInt32 4 바이트는 크고 서명되지 않은 것입니다. UInt32 아니다 의 종류 Int32, 또한 아닙니다 Int32 유형 Int64.

그리고 당신은 거의 항상 int 그리고 a float.

기본적으로 상속 및 클래스 계층 구조는 수학적 세트 포함과 다릅니다. 값 a UInt32 Hold는 값의 엄격한 하위 집합입니다. Int64 보유 할 수있는 것은 아닙니다 UInt32 유형입니다 Int64. 덜 분명히, an Int32 유형이 아닙니다 Int64 - 개념적 차이는 없지만 기본 표현은 다릅니다 (4 바이트 대 8 바이트). Decimals 훨씬 더 다릅니다.

XPath는 다릅니다. 모든 숫자 유형의 표현은 근본적으로 동일합니다. 거기에서, a의 차이 short 그리고 a long 중 하나이다 가능한 표현보다는 범위 - "123"은 모두 유효한 표현입니다. short 그리고 a의 유효한 표현 long 같은 값으로.

다른 팁

Decimal은 정밀도(기본적으로 돈)가 필요한 계산에 사용됩니다.여기를 보아라: http://msdn.microsoft.com/en-us/library/364x0z75(VS.80).aspx

단식/복식은 근사값(기본적으로 과학적 계산을 위한)을 의도했기 때문에 십진수와 다릅니다.

그렇기 때문에 그들은 관련이 없습니다.

바이트와 ​​문자는 완전히 다릅니다.바이트는 0-255인 반면 char은 문자이므로 유니코드 문자를 저장할 수 있습니다(255개가 훨씬 넘습니다!).

단위와 정수는 서로 불가능한 값을 각각 저장할 수 있기 때문에 자동으로 변환되지 않습니다(단위는 정수의 양수 범위의 두 배를 가짐).

일단 모든 것을 이해하고 나면 실제로 많은 의미가 있습니다.

당신의 나이에 관해서는 단순히 int를 사용하고 싶습니다;)

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