.NET 구조체와 같은 int 및 value 유형과 같은 기본 데이터 유형이 있습니다..NET에서 참조와 기본 유형 및 값 유형을 구분하는 방법
또한 참조 유형이 있습니다. 그들 모두는 객체 클래스에서 파생 된 것 같습니다.
.NET에서 참조 유형에 대해 기본 값 유형을 결정하는 방법은 무엇입니까?
어디에서 끝났습니까? 컴파일러 또는 JIT에서?
이것은 컴파일러의 기능에 속합니까?
.NET 구조체와 같은 int 및 value 유형과 같은 기본 데이터 유형이 있습니다..NET에서 참조와 기본 유형 및 값 유형을 구분하는 방법
또한 참조 유형이 있습니다. 그들 모두는 객체 클래스에서 파생 된 것 같습니다.
.NET에서 참조 유형에 대해 기본 값 유형을 결정하는 방법은 무엇입니까?
어디에서 끝났습니까? 컴파일러 또는 JIT에서?
이것은 컴파일러의 기능에 속합니까?
내장 된 공통 유형 시스템 (CTS) 프리미티브를 비롯한 모든 값 유형은 CTS 유형 "System.ValueType"(직접 열거 형 제외)에서 직접 파생됩니다.
그래서 컴파일러는 모든 유형의 기본 유형을 검사하여 알 수 있습니다. "System.ValueType"이면 값 유형이고, 그렇지 않으면 참조 유형입니다.
편집 :
public Enum Shipper {FedEx, Aerborne, USPS, Stork}
이 ... System.ValueType에서 직접 파생되지 않습니다뿐만 열거 형은, 그들은 ... System.ValueType에서 파생 System.Enum에서
'System.ValueType'에서 파생되지만 값 유형 자체가 아닌'System.Enum'을 제외합니다. 하지만 모든 enum 형은 * System.Enum에서 파생 된 값 유형으로 System.ValueType이 아닌 기본 유형을 만듭니다. 따라서 값 유형은 System.Enum을 제외하고 System.ValueType에서 파생 된 유형이지만이 테스트의 내부 구현은 이보다 효율적으로 수행 될 수 있습니다. –
Charles에게 감사드립니다. java는 비슷한 방식으로 작동합니까? –
@ 280Z28 : System.Enum은 직접 사용할 수있는 유형이 아니므로 그 의미가 확실하지 않습니다. 실제로 제네릭 형식에 대한 제약 조건으로 사용하기에 충분하지 않습니다 (http://msdn.microsoft.com/en-us/library/d5x73970.aspx 아래 참조). –
값 유형은 실제로 자체가 System.Object에서 파생 된 System.ValueType에서 파생됩니다.
값을 도출 유형은 System.ValueType
에서 파생되며 다른 것들 중에서는 GetHashCode
및 Equals
의 기본 (그러나 느린) 구현을 제공합니다. (반사를 사용하기 때문에 속도가 느립니다.)
과 같은 기본 유형은 box
명령어를 사용하여 IL에서 값 유형으로 박스 처리 될 수 있습니다. 그들은 그들과 협력 할 특별한 일리노이 명령을 가지고 있습니다.
참조 유형은 다른 모든 클래스입니다.
unsafe
코드에 사용할 수있는 포인터가 있으며 object
에서 전혀 파생되지 않습니다. EDIT - proof.
포인터 유형이 IntPtr에서 파생되지 않았습니까? –
예, 완전히 관련이 없습니다. 한가지,'IntPtr'는 구조체이고 구조체로부터 파생 될 수 없습니다. – SLaks
죄송합니다. 귀하의 질문에 대해 이해할 수 없습니다. –