Relaties tussen taalfuncties en bibliotheektypen

Voor de C#-taaldefinitie is een standaardbibliotheek vereist om bepaalde typen en bepaalde toegankelijke leden voor deze typen te hebben. De compiler genereert code die gebruikmaakt van deze vereiste typen en leden voor veel verschillende taalfuncties. Daarom worden C#-versies alleen ondersteund voor de bijbehorende .NET-versie en nieuwer. Dit zorgt voor het juiste runtimegedrag en de beschikbaarheid van alle vereiste typen en leden.

Deze afhankelijkheid van de standaardbibliotheekfunctionaliteit maakt sinds de eerste versie deel uit van de C#-taal. In die versie zijn voorbeelden opgenomen:

  • Exception - wordt gebruikt voor alle door compiler gegenereerde uitzonderingen.
  • String - synoniem van string.
  • Int32 - synoniem van int.

Die eerste versie was eenvoudig: de compiler en de standaardbibliotheek werden samen geleverd, en er was slechts één versie van elk.

In volgende versies van C# zijn af en toe nieuwe typen of leden toegevoegd aan de afhankelijkheden. Voorbeelden zijn: INotifyCompletion, CallerFilePathAttributeen CallerMemberNameAttribute. C# 7.0 heeft een afhankelijkheid ValueTuple toegevoegd om de taalfunctie voor tuples te implementeren. C# 8 vereist System.Index en System.Range voor bereiken en indexen, onder andere functies. Elke nieuwe versie kan aanvullende vereisten toevoegen.

Het taalontwerpteam werkt om het oppervlak van de typen en leden die vereist zijn in een compatibele standaardbibliotheek te minimaliseren. Dat doel wordt verdeeld tegen een schoon ontwerp waarbij nieuwe bibliotheekfuncties naadloos in de taal worden opgenomen. Er zijn nieuwe functies in toekomstige versies van C# die nieuwe typen en leden in een standaardbibliotheek vereisen. C#-compilerhulpprogramma's worden nu losgekoppeld van de releasecyclus van de .NET-bibliotheken op ondersteunde platforms.