2017-12-01 1 views
3

아시다시피, string, decimalobject은 기본 형식이 아닙니다. 나는 이것에 대해 견적을 공유 해요 :문자열에 대한 불일치는 원시 형식입니다

프리미티브 유형은 부울이며, 바이트, SByte, INT16, UINT16, INT32, UINT32, INT64, UINT64, IntPtr입니다, UIntPtr, 숯불, 더블 및 싱글.

typeof(typeName).IsPrimitive 속성으로도 테스트 할 수 있습니다. 또한, 나는 stackoverflow.com에 string 유형에 대한 토론을 읽었습니다.

요즘 전 C# (제 4 판)이 책은 말한다 통해 이름 CLR로 책을 읽고있다가 (112 페이지) : 보시다시피

CLR via C#, Fourth Edition (Jeffrey Richter)

, 작가 (Jeffrey Richter)는이 모든 것이 원시적 인 유형이라고 언급합니다. 누구든지 나를 분명히 할 수 있습니까? 그게 무슨 뜻입니까? 왜이 string, decimal, objectdynamic 유형이 프리미티브 목록에 있습니까?

답변

1

언어 프리미티브 Torres가 있으며 CLR 기본 유형이 있습니다. 언어 기본 유형은 문자열 및 동적과 같이 컴파일러 자체에서 특수하게 테스트되는 유형입니다. CLR 기본 유형은 부울 또는 Int32와 같은 다른 유형의 핵심 빌딩 블록입니다. 리플렉션 함수 IsPrimitive는 CLR 기본 유형에 대해서만 true를 반환하므로 코드를 작성하는 데 사용 된 프로그래밍 언어를 모르기 때문에 언어 기본 유형을 알 수 없습니다. 어떤 유형이 언어 기본 유형인지를 알 수있는 유일한 방법은 언어 사양 문서를 읽는 것입니다. C#에서는 dynamic이 C# primitive 타입이라는 것을 지적했다. 왜냐하면 컴파일러가 특별한 테스트를하기 때문이다 (특별한 casting 규칙과 동적 멤버 호출을 허용한다). 그러나 컴파일러는 런타임에 동적으로 Object로 바뀝니다. CLR이 전혀 아는 동적 유형은 없습니다.

7

저는 개인적으로 dynamic, decimal, object 또는 string 프리미티브 유형으로 전화하지 않습니다. 거기에 정식 소스에 Type.IsPrimitive을 사용합니다. dynamic은 CLR 의미의 형식조차 아닙니다.

C# 5 MS 사양에서는 소개에서 한 번, 따옴표로 한 번만 "프리미티브"라는 단어를 두 번 사용합니다. 다가오는 ECMA C# 5 표준은 전혀 사용하지 않습니다. "원시"이라는 용어가 CLR 유형에 대해 잘 정의 된이고 은 C#의 표준 용어 중 부분이 아니므로이 방법으로 사용하는 것은 좋지 않은 것처럼 보입니다. (어떤 전환을 예를 들어 C#을 사양하고 CLR이 동의 곳, 구조체는 약간 다른 많은 불편하다는 등의 매개 변수가없는 생성자가 있는지 여부를 사용할 수가 있습니다 있습니다.) 표준 C# 용어에서

, 간단한 종류가 있습니다 - 그러나 이들은 키워드가있는 값 유형입니다.

"키워드 설명 유형"을 설명하는 C# 5 MS 사양 또는 ECMA 표준에서 용어를 볼 수 없습니다.

관련 문제