Relações entre recursos de idioma e tipos de biblioteca

A definição da linguagem C# requer uma biblioteca padrão para ter certos tipos e certos membros acessíveis nesses tipos. O compilador gera código que usa esses tipos e membros necessários para muitos recursos de linguagem diferentes. Por esse motivo, as versões em C# são suportadas apenas para a versão .NET correspondente e mais recente. Isso garante o comportamento correto em tempo de execução e a disponibilidade de todos os tipos e membros necessários.

Essa dependência da funcionalidade de biblioteca padrão faz parte da linguagem C# desde sua primeira versão. Nessa versão, os exemplos incluíam:

  • Exception - usado para todas as exceções geradas pelo compilador.
  • String - sinónimo de string.
  • Int32 - sinónimo de int.

Essa primeira versão era simples: o compilador e a biblioteca padrão eram enviados juntos, e havia apenas uma versão de cada um.

As versões subsequentes do C# ocasionalmente adicionaram novos tipos ou membros às dependências. Os exemplos incluem: INotifyCompletion, CallerFilePathAttribute, e CallerMemberNameAttribute. O C# 7.0 adicionou uma dependência para ValueTuple implementar o recurso de linguagem de tuplas . O C# 8 requer System.Index e System.Range para intervalos e índices, entre outros recursos. Cada nova versão pode adicionar requisitos adicionais.

A equipe de design de linguagem trabalha para minimizar a área de superfície dos tipos e membros necessários em uma biblioteca padrão compatível. Esse objetivo é equilibrado com um design limpo, onde novos recursos da biblioteca são incorporados perfeitamente à linguagem. Haverá novos recursos em versões futuras do C# que exigem novos tipos e membros em uma biblioteca padrão. As ferramentas de compilador C# agora estão dissociadas do ciclo de lançamento das bibliotecas .NET em plataformas suportadas.