다음을 통해 공유


언어 기능과 라이브러리 형식 간의 관계

C# 언어 정의를 사용하려면 표준 라이브러리에 특정 형식 및 해당 형식에 액세스 가능한 특정 멤버가 있어야 합니다. 컴파일러는 다양한 언어 기능에 대해 이러한 필수 형식 및 멤버를 사용하는 코드를 생성합니다. 이러한 이유로 C# 버전은 해당 .NET 버전 이상에서만 지원됩니다. 이렇게 하면 올바른 런타임 동작과 모든 필수 형식 및 멤버의 가용성이 보장됩니다.

표준 라이브러리 기능에 대한 이러한 종속성은 첫 번째 버전부터 C# 언어의 일부였습니다. 해당 버전에 포함된 예제는 다음과 같습니다.

  • Exception - 모든 컴파일러 생성 예외에 사용됩니다.
  • String - 의 동의어입니다 string.
  • Int32 - 의 동의어입니다 int.

첫 번째 버전은 간단했습니다. 컴파일러와 표준 라이브러리가 함께 제공되었으며 각각 하나의 버전만 있었습니다.

C#의 후속 버전에서는 때때로 종속성에 새 형식 또는 멤버를 추가했습니다. 예를 들면 다음과 INotifyCompletionCallerFilePathAttributeCallerMemberNameAttribute같습니다. C# 7.0은 ValueTuple 언어 기능을 구현하기 위한 종속성을 추가했습니다. C# 8에서는 System.Index를 비롯한 여러 기능에 System.Range이 필요합니다. 새 버전마다 추가 요구 사항이 추가될 수 있습니다.

언어 디자인 팀은 규격 표준 라이브러리에 필요한 형식 및 멤버의 노출 영역을 최소화하기 위해 작동합니다. 이러한 목표는 새로운 라이브러리 기능이 언어에 원활하게 통합되는 깨끗한 디자인과 균형을 이뤄집니다. 이후 버전의 C#에는 표준 라이브러리에 새 형식 및 멤버가 필요한 새로운 기능이 있습니다. 이제 C# 컴파일러 도구가 지원되는 플랫폼에서 .NET 라이브러리의 릴리스 주기에서 분리됩니다.