Lezen in het Engels

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 wat aanvullende informatie eromheen biedt.

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 tussenliggende taalcode 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 taal en 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-compilatie over of start het JIT-jit-ing van uw code van IL naar computercode die daadwerkelijk kan worden uitgevoerd op een CPU. 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) of common intermediate language (CIL) genoemd.

Niet-beheerde code-interoperabiliteit

Natuurlijk maakt de CLR het mogelijk om de grenzen tussen beheerde en onbeheerde wereld door te geven, en er is veel code die dat doet, zelfs in de .NET-klassebibliotheken. Dit wordt interoperabiliteit of interop genoemd. 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.

Net als hier is C# één taal waarmee u onbeheerde constructies zoals pointers rechtstreeks in code kunt gebruiken door gebruik te maken van wat onveilige context wordt genoemd, waarmee een stukje code wordt aangewezen waarvoor de uitvoering niet wordt beheerd door de CLR.

Meer resources