Udostępnij za pośrednictwem


Relacje między funkcjami językowymi i typami bibliotek

Definicja języka C# wymaga, aby biblioteka standardowa posiadała określone typy oraz pewne dostępne elementy tych typów. 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 działanie w czasie wykonywania i dostępność wszystkich wymaganych typów i członów.

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# okazjonalnie dodały nowe typy lub członkowskie elementy do zależności. Przykłady obejmują: INotifyCompletion, CallerFilePathAttributei CallerMemberNameAttribute. C# 7.0 wprowadził zależność od ValueTuple do implementacji cechy języka krotki. Język C# 8, oprócz innych funkcji, wymaga System.Index i System.Range do zakresów i indeksów. 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 równoważony przejrzystym projektem, w którym nowe funkcje biblioteki są płynnie włączane do języka. W przyszłych wersjach języka C# pojawią się nowe funkcje, które będą wymagały nowych typów i elementów w standardowej bibliotece. Narzędzia kompilatora języka C# są teraz oddzielone od cyklu wydawania bibliotek platformy .NET na obsługiwanych platformach.