Relazioni tra funzionalità del linguaggio e tipi di libreriaRelationships between language features and library types

La definizione del linguaggio C# richiede che una libreria standard includa determinati tipi e specifici membri accessibili per tali tipi.The C# language definition requires a standard library to have certain types and certain accessible members on those types. Il compilatore genera codice che usa questi tipi e membri richiesti per numerose funzionalità del linguaggio diverse.The compiler generates code that uses these required types and members for many different language features. Quando necessario, sono disponibili pacchetti NuGet che contengono i tipi necessari per le versioni più recenti del linguaggio durante la scrittura di codice per gli ambienti in cui tali tipi o membri non sono ancora stati distribuiti.When necessary, there are NuGet packages that contain types needed for newer versions of the language when writing code for environments where those types or members have not been deployed yet.

Questa dipendenza dalla funzionalità della libreria standard fa parte del linguaggio C# fin dalla prima versione.This dependency on standard library functionality has been part of the C# language since its first version. Alcuni esempi in quella versione sono i seguenti:In that version, examples included:

  • Exception - usato per tutte le eccezioni generate dal compilatore.Exception - used for all compiler generated exceptions.
  • String - il tipo C# string è sinonimo di String.String - the C# string type is a synonym for String.
  • Int32 - sinonimo di int.Int32 - synonym of int.

La prima versione era semplice: il compilatore e la libreria standard erano forniti assieme ed esisteva una sola versione di ognuno.That first version was simple: the compiler and the standard library shipped together, and there was only one version of each.

Nelle versioni successive del linguaggio C# sono stati aggiunti occasionalmente nuovi tipi o membri alle dipendenze.Subsequent versions of C# have occasionally added new types or members to the dependencies. Alcuni esempi sono INotifyCompletion, CallerFilePathAttribute o CallerMemberNameAttribute.Examples include: INotifyCompletion, CallerFilePathAttribute and CallerMemberNameAttribute. C# 7.0 continua in questa direzione aggiungendo una dipendenza per ValueTuple per implementare la funzionalità del linguaggio tuple.C# 7.0 continues this by adding a dependency on ValueTuple to implement the tuples language feature.

Il team di progettazione del linguaggio si impegna per ridurre al minimo la superficie di tipi e membri richiesti in una libreria standard conforme.The language design team works to minimize the surface area of the types and members required in a compliant standard library. Tale obiettivo deve convivere con l'esigenza di realizzare una progettazione lineare che consenta il facile incorporamento delle nuove funzionalità della libreria nel linguaggio.That goal is balanced against a clean design where new library features are incorporated seamlessly into the language. Le versioni future di C# includeranno nuove funzionalità che richiedono nuovi tipi e membri in una libreria standard.There will be new features in future versions of C# that require new types and members in a standard library. È importante comprendere come gestire tali dipendenze nel lavoro di sviluppo.It's important to understand how to manage those dependencies in your work.

Gestione delle dipendenzeManaging your dependencies

Gli strumenti del compilatore C# sono ora separati dal ciclo di rilascio delle librerie .NET nelle piattaforme supportate.C# compiler tools are now decoupled from the release cycle of the .NET libraries on supported platforms. In effetti, le diverse librerie .NET hanno cicli di rilascio diversi: .NET Framework in Windows viene rilasciato come aggiornamento di Windows, .NET Core viene distribuito con una pianificazione separata e le versioni di Xamarin degli aggiornamenti delle librerie vengono forniti con gli strumenti di Xamarin per ogni piattaforma di destinazione.In fact, different .NET libraries have different release cycles: the .NET Framework on Windows is released as a Windows Update, .NET Core ships on a separate schedule, and the Xamarin versions of library updates ship with the Xamarin tools for each target platform.

Nella maggior parte dei casi, non si noteranno queste differenze.The majority of time, you won't notice these changes. Quando si lavora con una versione più recente del linguaggio che richiede funzionalità non ancora presenti nelle librerie .NET nella piattaforma, tuttavia, sarà necessario fare riferimento ai pacchetti NuGet per fornire i nuovi tipi.However, when you are working with a newer version of the language that requires features not yet in the .NET libraries on that platform, you'll reference the NuGet packages to provide those new types. Dato che le piattaforme supportate dall'app vengono aggiornate con le nuove installazioni dei framework, è possibile rimuovere il riferimento aggiuntivo.As the platforms your app supports are updated with new framework installations, you can remove the extra reference.

Questa separazione significa che è possibile usare le nuove funzionalità del linguaggio, anche quando i computer di destinazione potrebbero non disporre del framework corrispondente.This separation means you can use new language features even when you are targeting machines that may not have the corresponding framework.