Delen via


Wat is 'beheerde code'?

Wanneer u met .NET werkt, ziet u vaak de term 'beheerde code'. In dit artikel wordt uitgelegd wat beheerde code betekent en wordt aanvullende informatie eromheen geboden.

Om dit eenvoudig te doen, is beheerde code alleen dat: code waarvan de uitvoering wordt beheerd door een runtime. In dit geval wordt de betreffende runtime de Common Language Runtime of CLR genoemd, ongeacht de implementatie (bijvoorbeeld Mono, .NET Framework of .NET Core/.NET 5+). De CLR is belast met het nemen van de beheerde code, het compileren ervan in machinecode en vervolgens het uitvoeren ervan. Bovendien biedt de runtime verschillende belangrijke services, zoals automatisch geheugenbeheer, beveiligingsgrenzen en typeveiligheid.

Vergelijk dit met de manier waarop u een C/C++-programma uitvoert, ook wel 'onbeheerde code' genoemd. In de onbeheerde wereld is de programmeur verantwoordelijk voor vrijwel alles. Het werkelijke programma is in wezen een binair bestand dat het besturingssysteem (OS) in het geheugen laadt en wordt gestart. Alles anders, van geheugenbeheer tot beveiligingsoverwegingen zijn een last van de programmeur.

Beheerde code wordt geschreven in een van de talen op hoog niveau die kunnen worden uitgevoerd op .NET, zoals C#, Visual Basic, F# en andere. Wanneer u code compileert die in deze talen met hun respectieve compiler is geschreven, krijgt u geen computercode. U krijgt tussentaal code die de runtime vervolgens compileert en uitvoert. C++ is de enige uitzondering op deze regel, omdat het ook systeemeigen, niet-beheerde binaire bestanden kan produceren die worden uitgevoerd in Windows.

Tussenliggende programmeertaal & uitvoering

Wat is 'Tussenliggende taal' (of IL voor kort)? Het is een product van compilatie van code die is geschreven in .NET-talen op hoog niveau. Zodra u uw code hebt gecompileerd die in een van deze talen is geschreven, krijgt u een binair bestand dat bestaat uit IL. Het is belangrijk om te weten dat de IL onafhankelijk is van elke specifieke taal die boven op de runtime wordt uitgevoerd; er is zelfs een afzonderlijke specificatie die u kunt lezen als u zo geneigd bent.

Zodra u IL op basis van uw code op hoog niveau hebt geproduceerd, wilt u deze waarschijnlijk uitvoeren. Hier neemt de CLR het proces van Just-In-Time- compileren of JIT-ing van IL naar machinecode die daadwerkelijk op een CPU kan worden uitgevoerd. Op deze manier weet de CLR precies wat uw code doet en kan deze effectief beheren.

Tussenliggende taal wordt ook wel Common Intermediate Language (CIL) genoemd.

Niet-beheerde code-interoperabiliteit

Natuurlijk kan de CLR de grenzen tussen beheerde en onbeheerde wereld doorgeven, en er is veel code die dat doet, zelfs in de .NET-klassebibliotheken. Dit wordt interoperabiliteitgenoemd of interop- kortom. Met deze bepalingen kunt u bijvoorbeeld een onbeheerde bibliotheek inpakken en deze inbellen. Het is echter belangrijk om te weten dat wanneer u dit doet, wanneer de code de grenzen van de runtime overschrijdt, het werkelijke beheer van de uitvoering opnieuw in handen is van onbeheerde code en dus onder dezelfde beperkingen valt.

C# is een taal waarmee u onbeheerde constructies zoals aanwijzers rechtstreeks in code kunt gebruiken door gebruik te maken van wat bekend staat als onveilige context, waarmee een stukje code wordt aangewezen waarvoor de uitvoering niet wordt beheerd door de CLR.

Meer bronnen