다음을 통해 공유


형식 멤버

업데이트: 2007년 11월

런타임을 사용하면 이벤트, 필드, 중첩된 형식, 메서드 및 속성과 같은 형식의 멤버를 정의할 수 있습니다. 각 멤버에는 시그니처가 있습니다. 다음 표에서는 .NET Framework에서 사용하는 형식 멤버에 대해 설명합니다.

멤버

설명

이벤트

이벤트에 응답할 수 있는 인시던트를 정의하고 이벤트를 등록, 등록 취소 및 발생시키기 위한 메서드를 정의합니다. 이벤트는 주로 다른 형식에 상태 변경 내용을 알려주는 데 사용합니다.

필드

형식의 상태를 설명하고 상태의 일부를 포함합니다. 필드는 런타임에서 지원하는 모든 형식일 수 있습니다.

중첩 형식(nested type)

바깥쪽 형식 범위 내에서 형식을 정의합니다.

메서드

형식을 대상으로 수행할 수 있는 작업을 정의합니다. 메서드의 시그니처에서는 모든 인수 및 반환 값에 허용되는 형식을 지정합니다.

생성자는 해당 형식의 새 인스턴스를 만드는 특수한 메서드입니다.

속성

형식의 값 또는 상태를 지정하고 속성의 값을 가져오거나 설정하는 데 사용하는 메서드를 정의합니다. 속성은 기본 형식, 기본 형식의 컬렉션, 사용자 정의 형식 또는 사용자 정의 형식의 컬렉션일 수 있습니다. 속성은 주로 형식의 공용 인터페이스를 형식의 실제 표시와 무관하게 유지하기 위해 사용합니다.

멤버 특성

공용 형식 시스템에서 형식 멤버는 다양한 특성을 가질 수 있지만 언어에서 이런 특성을 모두 지원할 필요는 없습니다. 다음 표에서는 이러한 멤버 특성에 대해 설명합니다.

특성

적용 대상

설명

abstract

메서드, 속성 및 이벤트

형식에서 메서드 구현을 제공하지 않습니다. 추상 메서드를 상속하는 형식과 추상 메서드를 사용하여 인터페이스를 구현하는 형식에서 메서드에 대한 구현을 제공해야 합니다. 그러나 파생된 형식 자체가 추상 형식인 경우만은 예외입니다. 모든 추상 메서드는 가상 메서드입니다.

private, family, assembly, family와 assembly, family나 assembly 또는 public

모두

멤버의 액세스 가능성을 정의합니다.

private

멤버와 동일한 형식 또는 중첩된 형식 내에서만 액세스할 수 있습니다.

family

멤버와 동일한 형식 및 그 형식에서 상속된 파생된 형식에서 액세스할 수 있습니다.

assembly

형식이 정의된 어셈블리에서만 액세스할 수 있습니다.

family and assembly

패밀리와 어셈블리 모두에 대한 액세스 자격이 있는 형식에서만 액세스할 수 있습니다.

family or assembly

패밀리 또는 어셈블리에 대한 액세스 자격이 있는 형식에서만 액세스할 수 있습니다.

public

모든 형식에서 액세스할 수 있습니다.

final

메서드, 속성 및 이벤트

가상 메서드는 파생된 형식에서 재정의할 수 없습니다.

initialize-only

필드

값을 초기화할 수만 있고 초기화 이후에는 작성할 수 없습니다.

instance

필드, 메서드, 속성 및 이벤트

static(C# 및 C++), Shared(Visual Basic), virtual(C# 및 C++) 또는 Overridable(Visual Basic)로 표시되지 않은 멤버는 인스턴스 멤버이며 인스턴스 키워드가 없습니다. 멤버를 사용하는 개체 수만큼의 멤버 복사본이 메모리에 있습니다.

literal

필드

필드에 할당되는 값은 컴파일 타임에 알려지는 기본 제공 값 형식의 고정 값입니다. 리터럴 필드를 때로는 상수라고도 합니다.

newslot 또는 override

모두

멤버에서 시그니처가 같은 상속된 멤버와 상호 작용하는 방법을 정의합니다.

새 슬롯

시그니처가 같은 상속된 멤버를 숨깁니다.

override

상속된 가상 메서드의 정의를 바꿉니다.

기본값은 새 슬롯입니다.

static

필드, 메서드, 속성 및 이벤트

멤버는 형식의 특정 인스턴스가 아니라 멤버가 정의된 형식에 속합니다. 멤버는 형식의 인스턴스가 작성되지 않은 경우에도 존재하며 형식의 모든 인스턴스 간에 공유됩니다.

virtual

메서드, 속성 및 이벤트

메서드는 파생된 형식에서 구현할 수 있으며 정적으로 또는 동적으로 호출할 수 있습니다. 동적 호출을 사용하는 경우, 메서드의 어떤 구현을 호출할지 결정하는 것은 컴파일 타임에 알려진 형식이 아니라 런타임에 호출을 수행하는 인스턴스의 형식입니다. 가상 메서드를 정적으로 호출하려면 원하는 버전의 메서드를 사용하는 형식으로 변수를 캐스팅해야 합니다.

오버로딩

각 형식 멤버에는 고유의 시그니처가 있습니다. 메서드 시그니처는 메서드 이름과 매개 변수 목록(메서드 인수의 순서 및 형식)으로 구성됩니다. 형식 내에서 시그니처를 다르게 하여 이름이 같은 여러 개의 메서드를 정의할 수 있습니다. 이름이 같은 둘 이상의 메서드를 정의하면 메서드가 오버로드됩니다. 예를 들어, System.Char에서 IsDigit는 오버로드됩니다. 한 메서드에서는 Char를 받아 Boolean을 반환하고 다른 메서드에서는 StringInt32를 받아 Boolean을 반환합니다. 메서드에서 가변 인수 목록을 지원한다는 것을 나타내는 varargs 상수를 사용하여 매개 변수 목록을 한정할 수도 있습니다.

멤버 상속, 재정의 및 숨기기

파생된 형식에서는 기본 형식의 멤버를 모두 상속합니다. 즉, 파생된 형식에서 이러한 멤버를 정의하고 사용할 수 있습니다. 상속된 멤버의 동작 또는 품질을 다음과 같은 두 가지 방법으로 수정할 수 있습니다.

  • 파생된 형식에서 동일한 시그니처를 가진 새 멤버를 정의하여 상속 멤버를 숨길 수 있습니다. 이전의 공용 멤버를 전용 멤버로 변경하거나 상속된 메서드에 대해 final로 표시된 새로운 동작을 정의할 수 있습니다.

  • 상속된 가상 메서드를 파생된 형식에서 재정의할 수 있습니다. 메서드를 재정의하면 컴파일 타임에 알려진 변수의 형식이 아니라 런타임에 값의 형식을 기반으로 호출되는 메서드에 대한 새 정의가 제공됩니다. 가상 메서드가 final로 표시되어 있지 않고 새 메서드에서 적어도 가상 메서드와 동일한 수준의 액세스 가능성을 갖는 경우에만 새 메서드로 가상 메서드를 재정의할 수 있습니다.

참고 항목

개념

형식 정의

기타 리소스

공용 형식 시스템

멤버 디자인 지침

형식 디자인 지침