.NET 프리미티브 및 유형 계층 구조, 왜 이렇게 설계되었나요?
문제
.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"는 다를까요?
해결책
내 추측은 기본 하드웨어가 해당 클래스 계층 구조를 깨뜨리기 때문입니다. 당신이 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를 사용하고 싶습니다;)