공통형 시스템
Common Type System이 기사는 대부분의 독자들이 이해하기에는 너무 전문적일 수 있다.세부사항을 할 수 해 .(2009년 8월 ( 템플릿메시지의에 대해 합니다) |
Microsoft 의 경우.NET Framework, Common Type System(CTS; 공통 유형 시스템)은 컴퓨터 메모리에 유형 정의 및 유형의 특정 값을 표시하는 방법을 지정하는 표준입니다.다른 프로그래밍 언어로 작성된 프로그램이 정보를 쉽게 공유할 수 있도록 하기 위한 것입니다.프로그래밍 언어에서 사용되는 것처럼 유형은 값 집합의 정의(예: "0과 10 사이의 모든 정수")와 이러한 값에 허용되는 연산(예: 더하기 및 빼기)으로 설명할 수 있습니다.
CTS의 사양은 Ecma 표준 335 "Common Language Infrastructure (CLI) Partitions I to VI"에 기재되어 있습니다.CLI 및 CTS는 Microsoft 및 Microsoft에 의해 작성되었습니다.NET 프레임워크는 표준의 구현이다.
공통형 시스템의 기능
- 언어 간 통합, 유형 안전 및 고성능 코드 실행을 지원하는 프레임워크를 구축합니다.
- 많은 프로그래밍 언어의 완전한 구현을 지원하는 객체 지향 모델을 제공합니다.
- 언어가 따라야 하는 규칙을 정의하여 서로 다른 언어로 작성된 개체가 상호 작용할 수 있도록 합니다.
- 또한 CTS는 다양한 언어로 기술된 객체의 데이터 유형이 서로 상호 작용할 수 있도록 하는 규칙을 정의합니다.
- 또한 유형 가시성 및 유형 멤버에 대한 접근에 대한 규칙도 지정합니다.즉, CTS는 어셈블리가 유형의 범위를 형성하는 규칙을 확립하고 공통 언어 런타임에 의해 가시성 규칙을 적용합니다.
- CTS는 타입 상속, 가상 메서드 및 오브젝트의 라이프 타임을 관리하는 규칙을 정의합니다.
- 에서 지원되는 언어NET은 모든 데이터 유형 또는 일부 공통 데이터 유형을 구현할 수 있습니다.
소수점 값을 반올림할 때 프레임워크 전체에서 기본적으로 반올림("은행") 방법이 사용됩니다.버전 2 이후로는 프로그래머 [1]옵션에 따라 "대칭 산술 반올림"(0에서 반올림)도 사용할 수 있습니다.
- 그것은 다른 언어들과 소통하기 위해 사용된다.
유형 카테고리
공통 유형 시스템은 두 가지 범주의 유형을 지원합니다.
- 값 유형
- 값 유형에는 데이터가 직접 포함되며 값 유형의 인스턴스는 스택에 할당되거나 구조체에 인라인으로 할당됩니다.값 유형은 기본 제공(런타임에 의해 구현됨), 사용자 정의 또는 열거를 사용할 수 있습니다.
- 참조 유형
- 참조 유형은 값의 메모리 주소에 대한 참조를 저장하고 힙에 할당됩니다.참조 유형은 자기 설명 유형, 포인터 유형 또는 인터페이스 유형일 수 있습니다.참조 유형의 유형은 자체 설명 유형의 값에서 확인할 수 있습니다.자기 설명 유형은 어레이와 클래스 유형으로 더 세분화됩니다.클래스 유형은 사용자 정의 클래스, 상자형 값 유형 및 위임입니다.
다음 예시는 Visual Basic에 기재되어 있습니다.NET은 참조 유형과 값 유형의 차이를 보여 줍니다.
Imports(가져오기) 시스템. 학급 클래스 1 일반의 가치 ~하듯이 정수 = 0 끝. 학급 '클래스 1' 학급 시험 공유했습니다. 후보선수 주된() 어둡다 밸브 1 ~하듯이 정수 = 0 어둡다 밸브2 ~하듯이 정수 = 밸브 1 밸브2 = 123 어둡다 참조 1 ~하듯이 신규 클래스 1() 어둡다 참조 2 ~하듯이 클래스 1 = 참조 1 참조 2.가치 = 123 콘솔.기입선("값: {0}, {1}", 밸브 1, 밸브2) 콘솔.기입선("참조: {0}, {1}", 참조 1.가치, 참조 2.가치) 끝. 후보선수 '메인 끝. 학급 '테스트' 상기 예의 출력은
값: 0, 123 참조: 123, 123
복싱과 언박싱
복싱
값 유형을 참조 유형으로 변환하는 것을 상자화라고도 합니다.아래 예에서 볼 수 있듯이 Int32가 오브젝트에 박스화되어 있다고 컴파일러에 알릴 필요는 없습니다.이는 Int32가 그 자체를 처리하기 때문입니다.
Int32 x = 10; 물건 o = x ; // 암묵적 복싱 콘솔.기입선("개체 o = {0}",o); // "The Object o = 10" 출력 다만, Int32 는, 항상 다음과 같이 명시적으로 박스를 붙일 수 있습니다.
Int32 x = 10; 물건 o = (물건) x; // 명시적 박싱 콘솔.기입선("개체 o = {0}",o); // "개체 o = 10" 출력 언박싱
다음 예제에서는 참조 유형을 값 유형으로 되돌리는 방법을 보여 줍니다.먼저 Int32가 오브젝트에 박스화되어 다시 박스 해제됩니다.언박스는 명시적인 캐스팅이 필요합니다.
Int32 x = 5; 물건 o1 = x; // 암묵적 박싱 x = (인트)o1; // 명시적 언박싱