C#에서 클래스, 구조체 또는 레코드 형식의 정의는 형식이 수행할 수 있는 작업을 지정하는 청사진과 같습니다. 개체는 기본적으로 청사진에 따라 할당되고 구성된 메모리 블록입니다. 이 문서에서는 이러한 청사진 및 해당 기능에 대한 개요를 제공합니다. 이 시리즈의 다음 문서에서는 개체를 소개합니다.
캡슐화
캡슐화를 개체 지향 프로그래밍의 첫 번째 핵심 요소 또는 원칙이라고도 합니다. 클래스 또는 구조체는 각 멤버가 클래스 또는 구조체 외부의 코드에 액세스할 수 있는 방법을 지정할 수 있습니다. 클래스나 어셈블리 외부 소비자가 의도되지 않은 멤버는 코딩 오류나 악의적 악용을 제한하기 위해 숨겨집니다. 자세한 내용은 개체 지향 프로그래밍 자습서를 참조하세요.
구성원
형식의 멤버 에는 모든 메서드, 필드, 상수, 속성 및 이벤트가 포함됩니다. C#에는 다른 언어에 있는 것처럼 전역 변수 또는 메서드가 없습니다. 프로그램의 진입점인 Main 메서드도 클래스 또는 구조체 내에서 선언되어야 합니다( 최상위 문을 사용하는 경우 암시적으로).
다음 목록에는 클래스, 구조체 또는 레코드에서 선언할 수 있는 다양한 종류의 멤버가 모두 포함됩니다.
- 분야
- 상수
- 속성
- 메서드
- 생성자
- 이벤트
- 파이널라이저
- 인덱서
- 운영자
- 중첩된 유형
자세한 내용은 멤버를 참조 하세요.
접근성
일부 메서드 및 속성은 클라이언트 코드라고 하는 클래스 또는 구조체 외부의 코드에서 호출되거나 액세스되어야 합니다. 다른 메서드 및 속성은 클래스 또는 구조체 자체에서만 사용할 수 있습니다. 의도한 클라이언트 코드만 연결할 수 있도록 코드의 접근성을 제한하는 것이 중요합니다. 다음 액세스 한정자를 사용하여 형식 및 해당 멤버가 클라이언트 코드에 액세스할 수 있는 방법을 지정합니다.
- 공공
- 보호된
- 내부
- 보호됨 내부의
- 프라이빗
- 프라이빗 프로텍티드
기본 접근성은 .입니다 private.
상속
클래스(구조체는 아님)는 상속 개념을 지원합니다. 기본 클래스라고 하는 다른 클래스에서 파생되는 클래스는 생성자 및 종료자를 제외한 기본 클래스의 모든 public, protected 및 내부 멤버를 자동으로 포함합니다.
클래스를 추상으로 선언할 수 있습니다. 즉, 하나 이상의 메서드에 구현이 없습니다. 추상 클래스를 직접 인스턴스화할 수는 없지만 누락된 구현을 제공하는 다른 클래스의 기본 클래스로 사용할 수 있습니다. 다른 클래스가 상속되지 않도록 클래스를 sealed 로 선언할 수도 있습니다.
자세한 내용은 상속 및 다형성을 참조하세요.
인터페이스
클래스, 구조체 및 레코드는 여러 인터페이스를 구현할 수 있습니다. 인터페이스에서 구현하려면 형식이 인터페이스에 정의된 모든 메서드를 구현한다는 것을 의미합니다. 자세한 내용은 인터페이스를 참조하세요.
제네릭 형식
하나 이상의 형식 매개 변수를 사용하여 클래스, 구조체 및 레코드를 정의할 수 있습니다. 클라이언트 코드는 형식의 인스턴스를 만들 때 형식을 제공합니다. 예를 들어 네임스페이 List<T> 스의 클래스 System.Collections.Generic 는 하나의 형식 매개 변수로 정의됩니다. 클라이언트 코드는 리스트가 보유하는 형식을 지정하기 위해 List<string> 또는 List<int>의 인스턴스를 만듭니다. 자세한 내용은 제네릭을 참조하세요.
정적 형식
클래스(구조체 또는 레코드는 아님)를 로 static선언할 수 있습니다. 정적 클래스는 정적 멤버만 포함할 수 있으며 키워드를 사용하여 new 인스턴스화할 수 없습니다. 프로그램이 로드될 때 클래스의 복사본 하나가 메모리에 로드되고 해당 멤버는 클래스 이름을 통해 액세스됩니다. 클래스, 구조체 및 레코드에는 정적 멤버가 포함될 수 있습니다. 자세한 내용은 정적 클래스 및 정적 클래스 멤버를 참조하세요.
중첩된 유형
클래스, 구조체 또는 레코드는 다른 클래스, 구조체 또는 레코드 내에 중첩될 수 있습니다. 자세한 내용은 중첩 형식을 참조하세요.
부분 형식
한 코드 파일에서 클래스, 구조체 또는 메서드의 일부를 정의하고 다른 부분은 별도의 코드 파일에서 정의할 수 있습니다. 자세한 내용은 Partial 클래스 및 메서드를 참조하세요.
개체 이니셜라이저
속성에 값을 할당하여 클래스 또는 구조체 개체와 개체 컬렉션을 인스턴스화하고 초기화할 수 있습니다. 자세한 내용은 개체 이니셜라이저를 사용하여 개체를 초기화하는 방법을 참조하세요.
무명 형식
명명된 클래스를 만드는 것이 편리하지 않거나 필요하지 않은 경우 익명 형식 또는 튜플을 사용할 수 있습니다. 명명된 데이터 멤버는 익명 형식을 정의합니다. 튜플은 더 나은 성능 및 분해 지원을 제공하기 때문에 새 코드에 선호되는 선택입니다. 자세한 내용은 튜플 및 분해를 참조하세요.
확장 멤버
별도의 형식을 만들어 파생 클래스를 만들지 않고 클래스를 "확장"할 수 있습니다. 해당 형식에는 원래 형식에 속한 것처럼 호출할 수 있는 메서드가 포함되어 있습니다. 자세한 내용은 Extension 메서드를 참조하세요.
암시적으로 형식이 지정된 로컬 변수
클래스 또는 구조체 메서드 내에서 암시적 입력을 사용하여 컴파일러에 컴파일 시간에 변수의 형식을 결정하도록 지시할 수 있습니다. 자세한 내용은 var(C# 참조)을 참조하세요.
레코드
클래스 또는 구조체에 한정자를 추가할 record 수 있습니다. 레코드는 값 기반 같음의 기본 제공 동작이 있는 형식입니다. 레코드(또는 record classrecord struct)는 다음과 같은 기능을 제공합니다.
- 변경할 수 없는 속성을 사용하여 참조 형식을 만들기 위한 간결한 구문입니다.
- 가치의 평등 레코드 형식의 두 변수는 형식이 같고 모든 필드에 대해 두 레코드의 값이 같으면 같습니다. 클래스는 참조 같음을 사용합니다. 클래스 형식의 두 변수는 동일한 개체를 참조하는 경우 같습니다.
- 비결정적 돌연변이에 대한 간결한 구문입니다.
with식을 사용하면 기존 인스턴스의 복사본이지만 지정된 속성 값이 변경된 새 레코드 인스턴스를 만들 수 있습니다. - 표시를 위한 기본 제공 서식입니다.
이 메서드는
ToString레코드 형식 이름과 public 속성의 이름과 값을 출력합니다. - 레코드 클래스의 상속 계층 구조 지원 레코드 클래스는 상속을 지원합니다. 레코드 구조체는 상속을 지원하지 않습니다.
자세한 내용은 레코드를 참조하세요.
C# 언어 사양
자세한 내용은 C# 언어 사양을 참조하세요. 언어 사양은 C# 구문 및 사용의 최종 소스입니다.
.NET