형식 정의

업데이트: 2007년 11월

기존 형식을 사용하여 새 형식을 정의합니다. 기본으로 제공되는 값 형식, 포인터, 배열 및 대리자는 사용 시 정의되며 암시적 형식이라고 합니다. 형식은 다른 형식의 멤버가 될 수 있습니다. 즉, 중첩될 수 있습니다.

형식 정의에는 다음과 같은 요소가 포함됩니다.

  • 형식에 정의되어 있는 특성

  • 형식의 가시성

  • 형식의 이름

  • 형식의 기본 형식

  • 형식에서 구현하는 인터페이스

  • 형식의 멤버 각각에 대한 정의

특성

특성에서는 추가적인 사용자 정의 메타데이터를 제공합니다. 특성은 형식, 속성, 메서드 등 대부분의 언어 요소에 적용할 수 있습니다.

형식 액세스 가능성

모든 형식에는 다른 형식에서 액세스할 수 있는지를 제어하는 액세스 가능성 한정자가 있습니다. 다음 표에서는 런타임에서 지원하는 형식 액세스 가능성에 대해 설명합니다.

액세스 가능성

설명

public

모든 어셈블리에서 액세스할 수 있는 형식입니다.

assembly

어셈블리 안에서만 액세스할 수 있는 형식입니다.

중첩된 형식의 액세스 가능성은 액세스 가능 도메인에 따라 다릅니다. 액세스 가능 도메인은 멤버에 대해 선언된 액세스 가능성 및 한 수준 위 형식의 액세스 가능 도메인에 의해 결정됩니다. 그러나 중첩 형식의 액세스 가능 도메인은 포함하는 형식의 액세스 가능 도메인을 벗어날 수는 없습니다.

프로그램 P의 형식 T에 선언된 중첩된 멤버 M에 대한 액세스 가능 도메인은 다음과 같이 정의됩니다. M 자체가 형식일 수도 있습니다.

  • M에 대해 선언된 액세스 가능성이 public인 경우 M의 액세스 가능 도메인은 T의 액세스 가능 도메인입니다.

  • M에 대해 선언된 액세스 가능성이 protected internal인 경우 M의 액세스 가능 도메인은 P의 프로그램 텍스트를 가진 T의 액세스 가능 도메인과 P 외부에 선언된 T에서 파생된 모든 형식의 프로그램 텍스트 사이의 교집합 부분입니다.

  • M에 대해 선언된 액세스 가능성이 protected인 경우 M의 액세스 가능 도메인은 T의 프로그램 텍스트가 있는 T의 액세스 가능 도메인과 T에서 파생된 모든 형식의 교집합 부분입니다.

  • M에 대해 선언된 액세스 가능성이 internal인 경우 M의 액세스 가능 도메인은 P의 프로그램 텍스트가 있는 T의 액세스 가능 도메인의 교집합 부분입니다.

  • M에 대해 선언된 액세스 가능성이 private인 경우 M의 액세스 가능 도메인은 T의 프로그램 텍스트입니다.

형식 이름

공용 형식 시스템에서 형식 이름에는 두 가지 제약 조건이 있습니다.

  1. 모든 이름은 유니코드(16비트) 문자의 문자열로 인코딩됩니다.

  2. 이름에 값 0x0000(16비트)을 포함할 수 없습니다.

비교 연산은 바이트 단위로 수행되므로 대/소문자를 구분하며 로캘에 종속되지 않습니다.

형식은 단일 모듈 내에서 완전히 정의되지만 다른 모듈 및 어셈블리의 형식을 참조할 수도 있습니다. 형식 이름은 어셈블리 내에서만 고유하면 됩니다. 형식을 완전하게 식별하려면 형식의 구현을 포함하는 어셈블리로 형식 이름을 정규화해야 합니다. 자세한 내용은 정규화된 형식 이름 지정을 참조하십시오.

기본 형식 및 인터페이스

형식은 다른 형식에서 값과 동작을 상속할 수 있습니다. 공용 형식 시스템에서는 둘 이상의 기본 형식에서 형식을 상속할 수 없습니다.

형식에서 구현할 수 있는 인터페이스의 수는 제한이 없습니다. 인터페이스를 구현하려면 형식에서 해당 인터페이스의 모든 가상 멤버를 구현해야 합니다. 가상 메서드는 파생된 형식에서 구현할 수 있으며 정적으로 또는 동적으로 호출할 수 있습니다. 가상 멤버에 대한 자세한 내용은 형식 멤버를 참조하십시오. 상속 및 인터페이스에 대한 자세한 내용은 클래스인터페이스를 참조하십시오.

형식 멤버

형식의 동작과 상태는 형식의 이벤트, 필드, 중첩된 형식, 메서드 및 속성과 같은 멤버에 의해 정의됩니다. 자세한 내용은 형식 멤버를 참조하십시오.

참고 항목

개념

형식 멤버

기타 리소스

공용 형식 시스템

공용 언어 런타임의 어셈블리

특성을 사용하여 메타데이터 확장