Relationer mellan språkfunktioner och bibliotekstyper
C#-språkdefinitionen kräver att ett standardbibliotek har vissa typer och vissa tillgängliga medlemmar för dessa typer. Kompilatorn genererar kod som använder dessa nödvändiga typer och medlemmar för många olika språkfunktioner. Därför stöds C#-versioner endast för motsvarande .NET-version och senare. Det säkerställer rätt körningsbeteende och tillgängligheten för alla nödvändiga typer och medlemmar.
Det här beroendet av standardbiblioteksfunktioner har varit en del av C#-språket sedan den första versionen. I den versionen inkluderade exempel:
- Exception – används för alla kompilatorgenererade undantag.
- String - synonym till
string
. - Int32 - synonym till
int
.
Den första versionen var enkel: kompilatorn och standardbiblioteket levererades tillsammans, och det fanns bara en version av varje.
Efterföljande versioner av C# har ibland lagt till nya typer eller medlemmar i beroendena. Exempel är: INotifyCompletion, CallerFilePathAttributeoch CallerMemberNameAttribute. C# 7.0 har lagt till ett beroende för ValueTuple att implementera tupplars språkfunktion. C# 8 kräver System.Index och System.Range för intervall och index, bland andra funktioner. Varje ny version kan lägga till ytterligare krav.
Språkdesignteamet arbetar för att minimera ytan för de typer och medlemmar som krävs i ett kompatibelt standardbibliotek. Det målet balanseras mot en ren design där nya biblioteksfunktioner integreras sömlöst i språket. Det kommer att finnas nya funktioner i framtida versioner av C# som kräver nya typer och medlemmar i ett standardbibliotek. C#-kompileringsverktygen är nu frikopplade från versionscykeln för .NET-biblioteken på plattformar som stöds.