Die Beziehung zwischen Sprachfeatures und Bibliothekstypen

Die C#-Sprachdefinition erfordert eine Standardbibliothek, damit bestimmte Typen und bestimmte zugängliche Members für diese Typen verfügbar sind. Der Compiler generiert Code, der die erforderlichen Typen und Members für viele verschiedene Sprachfeatures verwendet. Aus diesem Grund werden C#-Versionen nur für die entsprechende .NET-Version und neuer unterstützt. Dadurch wird das richtige Laufzeitverhalten und die Verfügbarkeit aller erforderlichen Typen und Member sichergestellt.

Diese Abhängigkeit von den Funktionen der Standardbibliothek ist seit der ersten Version Teil der Sprache „C#“. In dieser Version sind folgende Beispiele enthalten:

  • Exception: wird für alle vom Compiler generierten Ausnahmen verwendet.
  • String: Synonym von string.
  • Int32: Synonym von int.

Diese erste Version war einfach, denn der Compiler und die Standardbibliothek waren beide enthalten, und von beiden gab es nur eine Version.

Bei nachfolgenden Versionen von C# wurden den Abhängigkeiten gelegentlich neue Typen oder Members hinzugefügt. Beispiele dafür sind INotifyCompletion, CallerFilePathAttribute und CallerMemberNameAttribute. C# 7.0 hat eine Abhängigkeit von ValueTuple zur Implementierung des Sprachfeatures für Tupels hinzugefügt. C# 8 erfordert unter anderem System.Index und System.Range für Bereiche und Indizes. Jede neue Version kann zusätzliche Anforderungen mit sich bringen.

Das Entwurfsteam für die Sprache arbeitet daran, die Oberfläche der Typen und Members zu verringern, die für eine kompatible Standardbibliothek erforderlich sind. Das Ziel ist ein übersichtliches Design, bei dem neue Bibliotheksfeatures nahtlos in die Sprache integriert werden können. In zukünftigen Versionen von C# werden neue Features hinzugefügt, die neue Typen und Members in einer Standardbibliothek erfordern. C#-Compilertools werden nun vom Releasezyklus der .NET-Bibliotheken auf den unterstützten Plattformen entkoppelt.