Overzicht van Common Language Runtime (CLR)

.NET biedt een runtime-omgeving met de naam common language runtime waarmee de code wordt uitgevoerd en services biedt waarmee het ontwikkelingsproces eenvoudiger wordt.

Compilers en hulpprogramma's maken gebruik van de functionaliteit van de common Language Runtime en stellen u in staat om code te schrijven die profiteert van de beheerde uitvoeringsomgeving. Code die u ontwikkelt met een taalcompilator die is gericht op de runtime, wordt beheerde code genoemd. Beheerde code profiteert van functies zoals integratie tussen talen, verwerking van uitzonderingen in meerdere talen, verbeterde beveiliging, versiebeheer en implementatieondersteuning, een vereenvoudigd model voor interactie met onderdelen en foutopsporing en profileringsservices.

Notitie

Compilers en hulpprogramma's kunnen uitvoer produceren die de algemene taalruntime kan verbruiken omdat het typesysteem, de indeling van metagegevens en de runtimeomgeving (het virtuele uitvoeringssysteem) allemaal zijn gedefinieerd door een openbare standaard, de ECMA Common Language Infrastructure-specificatie. Zie ECMA C# en Common Language Infrastructure Specifications voor meer informatie.

Om de runtime in staat te stellen services te leveren aan beheerde code, moeten taalcompilers metagegevens verzenden waarin de typen, leden en verwijzingen in uw code worden beschreven. Metagegevens worden opgeslagen met de code; elk laadbaar PE-bestand (Common Language Runtime Portable Executable) bevat metagegevens. De runtime gebruikt metagegevens om klassen te zoeken en te laden, instanties in het geheugen in te delen, methode-aanroepen op te lossen, systeemeigen code te genereren, beveiliging af te dwingen en contextgrenzen voor runtime in te stellen.

De runtime verwerkt automatisch de objectindeling en beheert verwijzingen naar objecten, waardoor ze worden vrijgegeven wanneer ze niet meer worden gebruikt. Objecten waarvan de levensduur op deze manier wordt beheerd, worden beheerde gegevens genoemd. Garbagecollection elimineert geheugenlekken en enkele andere veelvoorkomende programmeerfouten. Als uw code wordt beheerd, kunt u beheerde, onbeheerde of zowel beheerde als onbeheerde gegevens in uw .NET-toepassing gebruiken. Omdat taalcompilers hun eigen typen leveren, zoals primitieve typen, weet u mogelijk niet altijd of moet u weten of uw gegevens worden beheerd.

Met de algemene taalruntime kunt u eenvoudig onderdelen en toepassingen ontwerpen waarvan objecten in verschillende talen communiceren. Objecten die in verschillende talen zijn geschreven, kunnen met elkaar communiceren en hun gedrag kan nauw worden geïntegreerd. U kunt bijvoorbeeld een klasse definiëren en vervolgens een andere taal gebruiken om een klasse af te leiden van uw oorspronkelijke klasse of een methode aan te roepen voor de oorspronkelijke klasse. U kunt ook een exemplaar van een klasse doorgeven aan een methode van een klasse die in een andere taal is geschreven. Deze integratie tussen talen is mogelijk omdat taalcompilers en hulpprogramma's die gericht zijn op de runtime, gebruikmaken van een gemeenschappelijk typesysteem dat is gedefinieerd door de runtime. Ze volgen de regels van de runtime voor het definiëren van nieuwe typen en voor het maken, gebruiken, behouden en binden aan typen.

Als onderdeel van hun metagegevens bevatten alle beheerde onderdelen informatie over de onderdelen en resources op basis waarvan ze zijn gebouwd. De runtime gebruikt deze informatie om ervoor te zorgen dat uw onderdeel of toepassing beschikt over de opgegeven versies van alles wat nodig is, waardoor uw code minder waarschijnlijk wordt verbroken vanwege een onmete afhankelijkheid. Registratiegegevens en statusgegevens worden niet meer opgeslagen in het register, waar ze moeilijk kunnen worden vastgesteld en onderhouden. In plaats daarvan wordt informatie over de typen die u definieert en de bijbehorende afhankelijkheden opgeslagen met de code als metagegevens. Op deze manier is de taak van onderdeelreplicatie en verwijdering minder ingewikkeld.

Taalcompilers en hulpprogramma's stellen de functionaliteit van de runtime beschikbaar op manieren die nuttig en intuïtief zijn voor ontwikkelaars. Sommige functies van de runtime zijn mogelijk merkbaarder in de ene omgeving dan in een andere. Hoe u de runtime gebruikt, is afhankelijk van de taalcompilaties of hulpprogramma's die u gebruikt. Als u bijvoorbeeld een Visual Basic-ontwikkelaar bent, merkt u misschien dat de Visual Basic-taal met de algemene taal meer objectgeoriënteerde functies heeft dan voorheen. De runtime biedt de volgende voordelen:

  • Prestatieverbeteringen.

  • De mogelijkheid om eenvoudig onderdelen te gebruiken die in andere talen zijn ontwikkeld.

  • Uitbreidbare typen van een klassebibliotheek.

  • Taalfuncties zoals overname, interfaces en overbelasting voor objectgeoriënteerde programmering.

  • Ondersteuning voor expliciete gratis threading waarmee u multithreaded en schaalbare toepassingen kunt maken.

  • Ondersteuning voor het verwerken van gestructureerde uitzonderingen.

  • Ondersteuning voor aangepaste kenmerken.

  • Garbagecollection.

  • Gebruik van gemachtigden in plaats van functiepointers voor betere typeveiligheid en -beveiliging. Zie Common Type System voor meer informatie over gemachtigden.

CLR-versies

.NET Core- en .NET 5+-releases hebben één productversie, dat wil gezegd, er is geen afzonderlijke CLR-versie. Zie .NET Core downloaden voor een lijst met .NET Core-versies.

Het .NET Framework-versienummer komt echter niet noodzakelijkerwijs overeen met het versienummer van de CLR dat het bevat. Zie .NET Framework-versies en afhankelijkheden voor een lijst met .NET Framework-versies en de bijbehorende CLR-versies.

Title Beschrijving
Beheerd uitvoeringsproces Beschrijft de stappen die nodig zijn om te profiteren van de algemene taalruntime.
Automatisch geheugenbeheer Beschrijft hoe de garbagecollector geheugen toewijst en vrijgeeft.
Overzicht van .NET Framework Hierin worden belangrijke .NET Framework-concepten beschreven, zoals het algemene typesysteem, interoperabiliteit tussen talen, beheerde uitvoering, toepassingsdomeinen en assembly's.
Algemeen typesysteem Beschrijft hoe typen worden gedeclareerd, gebruikt en beheerd in de runtime ter ondersteuning van integratie tussen talen.