Panoramica di CLR (Common Language Runtime)Common Language Runtime (CLR) overview

In .NET Framework viene fornito un ambiente di runtime, denominato Common Language Runtime, in cui viene eseguito il codice e nel quale sono offerti servizi che facilitano il processo di sviluppo.The .NET Framework provides a run-time environment called the common language runtime, which runs the code and provides services that make the development process easier.

I compilatori e gli strumenti dei linguaggi espongono le funzionalità di Common Language Runtime e consentono di scrivere codice che sfrutta i vantaggi di tale ambiente di esecuzione gestito.Compilers and tools expose the common language runtime's functionality and enable you to write code that benefits from this managed execution environment. Il codice sviluppato tramite un compilatore di linguaggio basato su Common Language Runtime viene definito codice gestito e si avvantaggia di funzionalità quali l'integrazione tra i linguaggi, la gestione delle eccezioni con linguaggi diversi, la sicurezza avanzata, il supporto per il controllo delle versioni e la distribuzione, un modello semplificato per l'interazione tra componenti e servizi di debug e di profilatura.Code that you develop with a language compiler that targets the runtime is called managed code; it benefits from features such as cross-language integration, cross-language exception handling, enhanced security, versioning and deployment support, a simplified model for component interaction, and debugging and profiling services.

Nota

I compilatori e gli strumenti sono in grado di produrre un output che può essere usato da Common Language Runtime perché il sistema di tipi, il formato dei metadati e l'ambiente di runtime (il sistema di esecuzione virtuale) sono tutti definiti da uno standard pubblico, la specifica di ECMA Common Language Infrastructure.Compilers and tools are able to produce output that the common language runtime can consume because the type system, the format of metadata, and the runtime environment (the virtual execution system) are all defined by a public standard, the ECMA Common Language Infrastructure specification. Per altre informazioni, vedere ECMA C# and Common Language Infrastructure Standards (Specifiche ECMA C# e Common Language Infrastructure).For more information, see ECMA C# and Common Language Infrastructure Specifications.

Per consentire all'ambiente di esecuzione di fornire servizi al codice gestito, è necessario che i compilatori di linguaggio generino metadati che descrivono i tipi, i membri e i riferimenti presenti nel codice.To enable the runtime to provide services to managed code, language compilers must emit metadata that describes the types, members, and references in your code. I metadati sono memorizzati con il codice: ogni file eseguibile trasportabile (PE, Portable Executable) caricabile in Common Language Runtime contiene metadati.Metadata is stored with the code; every loadable common language runtime portable executable (PE) file contains metadata. I metadati vengono usati nell'ambiente di esecuzione per individuare e caricare classi, disporre istanze in memoria, risolvere chiamate di metodo, generare codice nativo, garantire sicurezza e impostare limiti di contesto per la fase di esecuzione.The runtime uses metadata to locate and load classes, lay out instances in memory, resolve method invocations, generate native code, enforce security, and set run-time context boundaries.

Il layout degli oggetti e i riferimenti agli oggetti vengono gestiti automaticamente: quando non sono più in uso, gli oggetti vengono rilasciati.The runtime automatically handles object layout and manages references to objects, releasing them when they are no longer being used. Gli oggetti la cui durata viene amministrata con queste modalità vengono denominati dati gestiti.Objects whose lifetimes are managed in this way are called managed data. La procedura di Garbage Collection consente di eliminare il rischio di perdite di memoria e di altri errori comuni di programmazione.Garbage collection eliminates memory leaks as well as some other common programming errors. Se si impiega codice gestito, è possibile usare nell'applicazione .NET Framework sia dati gestiti che dati non gestiti, anche simultaneamente.If your code is managed, you can use managed data, unmanaged data, or both managed and unmanaged data in your .NET Framework application. Dal momento che i compilatori di linguaggio forniscono autonomamente tipi, quali i tipi primitivi, è possibile che non sempre lo sviluppatore sappia, o abbia l'esigenza di sapere, se i dati che usa sono gestiti.Because language compilers supply their own types, such as primitive types, you might not always know (or need to know) whether your data is being managed.

Common Language Runtime facilita la progettazione di componenti e applicazioni i cui oggetti interagiscano in contesti di linguaggi diversi.The common language runtime makes it easy to design components and applications whose objects interact across languages. Oggetti scritti in linguaggi differenti possono infatti interagire e funzionare in modo strettamente integrato.Objects written in different languages can communicate with each other, and their behaviors can be tightly integrated. Una volta definita una classe, ad esempio, è possibile usare un linguaggio differente per derivarne un'altra classe o per chiamarvi un metodo.For example, you can define a class and then use a different language to derive a class from your original class or call a method on the original class. È anche possibile passare l'istanza di una classe al metodo di una classe scritta in un linguaggio differente.You can also pass an instance of a class to a method of a class written in a different language. Questa integrazione tra linguaggi è possibile perché i compilatori e gli strumenti dei linguaggi destinati alla fase di esecuzione usano un sistema di tipi comuni, definito dall'ambiente di esecuzione, e seguono le regole di tale ambiente per la definizione di nuovi tipi, oltre che per la creazione, l'utilizzo, il mantenimento e l'associazione a tipi.This cross-language integration is possible because language compilers and tools that target the runtime use a common type system defined by the runtime, and they follow the runtime's rules for defining new types, as well as for creating, using, persisting, and binding to types.

In quanto parte dei rispettivi metadati, tutti i componenti gestiti contengono informazioni sui componenti e le risorse in base ai quali sono stati compilati.As part of their metadata, all managed components carry information about the components and resources they were built against. Il runtime usa tali informazioni per garantire la disponibilità delle versioni specificate del software necessario al funzionamento del componente o dell'applicazione, riducendo così il rischio di interruzioni del codice dovute all'irreperibilità di alcune dipendenze.The runtime uses this information to ensure that your component or application has the specified versions of everything it needs, which makes your code less likely to break because of some unmet dependency. Le informazioni di registrazione e i dati dello stato non vengono più memorizzati nel Registro di sistema, in cui poteva essere difficile individuarli e gestirli.Registration information and state data are no longer stored in the registry where they can be difficult to establish and maintain. Le informazioni sui tipi definiti e sulle relative dipendenze vengono invece archiviate con il codice in forma di metadati, semplificando di gran lunga le attività di replica e rimozione di componenti.Instead, information about the types you define (and their dependencies) is stored with the code as metadata, making the tasks of component replication and removal much less complicated.

I compilatori e gli strumenti dei linguaggi sono progettati per esporre le funzionalità del runtime secondo modalità utili e intuitive per gli sviluppatori.Language compilers and tools expose the runtime's functionality in ways that are intended to be useful and intuitive to developers. Alcune di queste funzionalità potrebbero quindi essere più evidenti in un ambiente operativo anziché in un altro.This means that some features of the runtime might be more noticeable in one environment than in another. Il modo di percepire il funzionamento dell'ambiente di esecuzione dipende dai compilatori o dagli strumenti dei linguaggi usati.How you experience the runtime depends on which language compilers or tools you use. Lo sviluppatore in Visual Basic, ad esempio, potrà rilevare in questo linguaggio una maggiore presenza di funzionalità orientate a oggetti, conferitagli da Common Language Runtime.For example, if you are a Visual Basic developer, you might notice that with the common language runtime, the Visual Basic language has more object-oriented features than before. Il runtime offre i vantaggi seguenti:The runtime provides the following benefits:

  • Miglioramenti delle prestazioni.Performance improvements.

  • La possibilità di usare con facilità componenti sviluppati in altri linguaggi.The ability to easily use components developed in other languages.

  • La disponibilità dei tipi estensibili forniti da una libreria di classi.Extensible types provided by a class library.

  • Funzionalità del linguaggio come ereditarietà, interfacce e overload per la programmazione orientata a oggetti.Language features such as inheritance, interfaces, and overloading for object-oriented programming.

  • Supporto per il modello di threading Free esplicito che consente la creazione di applicazioni scalabili a thread multipli.Support for explicit free threading that allows creation of multithreaded, scalable applications.

  • Supporto per la gestione delle eccezioni strutturata.Support for structured exception handling.

  • Supporto per gli attributi personalizzati.Support for custom attributes.

  • Garbage Collection.Garbage collection.

  • Utilizzo dei delegati invece dei puntatori a funzioni con conseguente miglioramento dell'indipendenza dai tipi e della sicurezza dei tipi.Use of delegates instead of function pointers for increased type safety and security. Per altre informazioni sui delegati, vedere Common Type System.For more information about delegates, see Common Type System.

Versioni CLRCLR versions

Il numero di versione di .NET Framework non corrisponde necessariamente al numero di versione di CLR inclusa.The version number of the .NET Framework doesn't necessarily correspond to the version number of the CLR it includes. Nella tabella seguente viene mostrata la correlazione tra due numeri di versione.The following table shows how the two version numbers correlate.

Versione di .NET Framework.NET Framework version Include la versione CLRIncludes CLR version
1.01.0 1.01.0
1.11.1 1.11.1
2.02.0 2.02.0
3.03.0 2.02.0
3.53.5 2.02.0
44 44
4.5 (incluse 4.5.1 e 4.5.2)4.5 (including 4.5.1 and 4.5.2) 44
4.6 (incluse 4.6.1 e 4.6.2)4.6 (including 4.6.1 and 4.6.2) 44
4.7 (incluse 4.7.1 e 4.7.2)4.7 (including 4.7.1 and 4.7.2) 44
TitoloTitle DescrizioneDescription
Processo di esecuzione gestitaManaged Execution Process Vengono descritti i passaggi necessari per essere in condizione di sfruttare i vantaggi di Common Language Runtime.Describes the steps required to take advantage of the common language runtime.
Gestione automatica della memoriaAutomatic Memory Management Viene descritta la modalità usata dal Garbage Collector per allocare e liberare memoria.Describes how the garbage collector allocates and releases memory.
Cenni preliminari su .NET FrameworkOverview of the .NET Framework Vengono descritti i concetti principali di .NET Framework quali Common Type System, l'interoperabilità tra più linguaggi, l'esecuzione gestita, i domini delle applicazioni e gli assembly.Describes key .NET Framework concepts such as the common type system, cross-language interoperability, managed execution, application domains, and assemblies.
Common Type SystemCommon Type System Vengono descritte le modalità di dichiarazione, utilizzo e gestione dei tipi nell'ambiente di esecuzione in supporto all'integrazione tra i linguaggi.Describes how types are declared, used, and managed in the runtime in support of cross-language integration.

Vedere ancheSee also

Versioni e dipendenzeVersions and Dependencies