Condividi tramite


Panoramica di Common Language Runtime (CLR)

.NET fornisce un ambiente di runtime denominato Common Language Runtime che esegue il codice e fornisce servizi che semplificano il processo di sviluppo.

I compilatori e gli strumenti espongono la funzionalità di Common Language Runtime e consentono di scrivere codice che trae vantaggio dall'ambiente di esecuzione gestito. Il codice sviluppato con un compilatore di linguaggio destinato al runtime è denominato codice gestito. Il codice gestito offre vantaggi da funzionalità come l'integrazione tra linguaggi, la gestione delle eccezioni tra linguaggi, la sicurezza avanzata, il controllo delle versioni e il supporto della distribuzione, un modello semplificato per l'interazione dei componenti e il debug e i servizi di profilatura.

Annotazioni

I compilatori e gli strumenti possono produrre output che Common Language Runtime può utilizzare perché il sistema dei tipi, il formato dei metadati e l'ambiente di runtime (il sistema di esecuzione virtuale) sono tutti definiti da uno standard pubblico, la specifica ECMA Common Language Infrastructure. Per altre informazioni, vedere Specifiche di ECMA C# e Common Language Infrastructure.

Per consentire al runtime di fornire servizi al codice gestito, i compilatori del linguaggio devono generare metadati che descrivono i tipi, i membri e i riferimenti nel codice. I metadati vengono archiviati con il codice; ogni file eseguibile portabile di Common Language Runtime (PE) caricabile contiene metadati. Il runtime usa i metadati per individuare e caricare le classi, disporre le istanze in memoria, risolvere le chiamate al metodo, generare codice nativo, applicare la sicurezza e impostare i limiti del contesto di runtime.

Il runtime gestisce automaticamente il layout degli oggetti e gestisce i riferimenti agli oggetti, rilasciandoli quando non vengono più usati. Gli oggetti la cui durata viene gestita in questo modo vengono chiamati dati gestiti. Garbage Collection elimina le perdite di memoria e altri errori di programmazione comuni. Se il codice è gestito, è possibile usare dati gestiti, dati non gestiti o entrambi nell'applicazione .NET. Poiché i compilatori di linguaggio forniscono i propri tipi, ad esempio i tipi primitivi, potrebbe non essere sempre necessario sapere se i dati vengono gestiti.

Common Language Runtime semplifica la progettazione di componenti e applicazioni i cui oggetti interagiscono tra linguaggi. Gli oggetti scritti in linguaggi diversi possono comunicare tra loro e i relativi comportamenti possono essere strettamente integrati. Ad esempio, è possibile definire una classe e quindi usare un linguaggio diverso per derivare una classe dalla classe originale o chiamare un metodo sulla classe originale. È anche possibile passare un'istanza di una classe a un metodo di una classe scritta in un linguaggio diverso. Questa integrazione tra linguaggi è possibile perché i compilatori e gli strumenti del linguaggio destinati al runtime usano un sistema di tipi comune definito dal runtime. Seguono le regole del runtime per la definizione di nuovi tipi e per la creazione, l'uso, la persistenza e l'associazione ai tipi.

Come parte dei metadati, tutti i componenti gestiti contengono informazioni sui componenti e sulle risorse in base ai quali sono stati compilati. Il runtime usa queste informazioni per assicurarsi che il componente o l'applicazione disponga delle versioni specificate di tutti gli elementi necessari, il che rende meno probabile che il codice si interrompa a causa di alcune dipendenze non soddisfatte. Le informazioni di registrazione e i dati sullo stato non vengono più archiviati nel Registro di sistema, in cui possono essere difficili da stabilire e gestire. Al contrario, le informazioni sui tipi definiti e le relative dipendenze vengono archiviate con il codice come metadati. In questo modo, l'attività di replica e rimozione dei componenti è meno complessa.

I compilatori e gli strumenti del linguaggio espongono le funzionalità del runtime in modi che devono essere utili e intuitivi per gli sviluppatori. Alcune funzionalità del runtime potrebbero essere più evidenti in un ambiente rispetto a un altro. La modalità di utilizzo del runtime dipende dai compilatori o dagli strumenti del linguaggio usati. Ad esempio, se sei uno sviluppatore di Visual Basic, potresti notare che con Common Language Runtime, il linguaggio Visual Basic ha più funzionalità orientate agli oggetti rispetto a prima. Il runtime offre i vantaggi seguenti:

  • Miglioramenti delle prestazioni.

  • Possibilità di usare facilmente i componenti sviluppati in altri linguaggi.

  • Tipi estendibili forniti da una libreria di classi.

  • Funzionalità del linguaggio, ad esempio ereditarietà, interfacce e overload per la programmazione orientata agli oggetti.

  • Supporto per il threading libero esplicito che consente la creazione di applicazioni multithread e scalabili.

  • Supporto per la gestione strutturata delle eccezioni.

  • Supporto per attributi personalizzati.

  • Raccolta dei rifiuti.

  • Uso dei delegati anziché dei puntatori a funzione per una maggiore sicurezza e sicurezza dei tipi. Per altre informazioni sui delegati, vedere Common Type System.

Versioni CLR

Le versioni di .NET Core e .NET 5+ hanno una singola versione del prodotto, ovvero non esiste una versione CLR separata. Per un elenco delle versioni di .NET Core, vedere Scaricare .NET Core.

Tuttavia, il numero di versione di .NET Framework non corrisponde necessariamente al numero di versione di CLR incluso. Per un elenco delle versioni di .NET Framework e delle versioni CLR corrispondenti, vedere Versioni e dipendenze di .NET Framework.

Titolo Descrizione
Processo di esecuzione gestita Descrive i passaggi necessari per sfruttare Common Language Runtime.
Gestione automatica della memoria Descrive il modo in cui Il Garbage Collector alloca e rilascia memoria.
Panoramica di .NET Framework Vengono descritti i concetti chiave di .NET Framework, ad esempio il sistema di tipi comune, l'interoperabilità tra linguaggi, l'esecuzione gestita, i domini applicazione e gli assembly.
Common Type System Descrive in che modo i tipi vengono dichiarati, usati e gestiti nel runtime in supporto dell'integrazione tra linguaggi.