Relacje między funkcjami językowymi i typami bibliotek

Definicja języka C# wymaga biblioteki standardowej, aby mieć określone typy i niektóre dostępne elementy członkowskie w tych typach. Kompilator generuje kod, który używa tych wymaganych typów i elementów członkowskich dla wielu różnych funkcji językowych. Z tego powodu wersje języka C# są obsługiwane tylko dla odpowiedniej wersji platformy .NET i nowszych. Zapewnia to prawidłowe zachowanie czasu wykonywania i dostępność wszystkich wymaganych typów i elementów członkowskich.

Ta zależność od standardowej funkcjonalności biblioteki była częścią języka C# od jej pierwszej wersji. W tej wersji uwzględniono przykłady:

  • Exception — używane dla wszystkich wyjątków generowanych przez kompilator.
  • String- synonim .string
  • Int32- synonim .int

Pierwsza wersja była prosta: kompilator i biblioteka standardowa dostarczane razem, a każda z nich była tylko jedna.

Kolejne wersje języka C# od czasu do czasu dodali nowe typy lub elementy członkowskie do zależności. Przykłady obejmują: INotifyCompletion, CallerFilePathAttributei CallerMemberNameAttribute. Język C# 7.0 dodał zależność od ValueTuple implementacji funkcji języka krotki. Język C# 8 wymaga System.Index i System.Range dla zakresów i indeksów, między innymi. Każda nowa wersja może dodać dodatkowe wymagania.

Zespół projektowy języka pracuje, aby zminimalizować obszar powierzchni typów i elementów członkowskich wymaganych w zgodnej standardowej bibliotece. Ten cel jest zrównoważony w stosunku do czystego projektu, w którym nowe funkcje biblioteki są bezproblemowo włączone do języka. W przyszłych wersjach języka C# będą dostępne nowe funkcje, które wymagają nowych typów i elementów członkowskich w standardowej bibliotece. Narzędzia kompilatora języka C# są teraz oddzielone od cyklu wydawania bibliotek platformy .NET na obsługiwanych platformach.