Vad är "hanterad kod"?

När du arbetar med .NET stöter du ofta på termen "hanterad kod". Den här artikeln förklarar vad hanterad kod innebär och ger ytterligare information om den.

För att uttrycka det enkelt är hanterad kod just det: kod vars körning hanteras av en körning. I det här fallet kallas körningen i fråga för Common Language Runtime eller CLR, oavsett implementering (till exempel Mono, .NET Framework eller .NET Core/.NET 5+). CLR ansvarar för att ta den hanterade koden, kompilera den till maskinkod och sedan köra den. Dessutom tillhandahåller körningen flera viktiga tjänster, till exempel automatisk minneshantering, säkerhetsgränser och typsäkerhet.

Jämför detta med hur du skulle köra ett C/C++-program, även kallat "ohanterad kod". I den ohanterade världen ansvarar programmeraren för i stort sett allt. Det faktiska programmet är i princip en binär fil som operativsystemet (OS) läser in i minnet och startar. Allt annat, från minneshantering till säkerhetsöverväganden, är programmerarens börda.

Hanterad kod skrivs på ett av de högnivåspråk som kan köras ovanpå .NET, till exempel C#, Visual Basic, F# och andra. När du kompilerar kod som skrivits på dessa språk med respektive kompilator får du inte datorkod. Du får kod för mellanliggande språk som körningen sedan kompilerar och kör. C++ är det enda undantaget till den här regeln, eftersom det också kan skapa interna, ohanterade binärfiler som körs i Windows.

Mellanliggande språk och körning

Vad är "Mellanliggande språk" (eller IL för kort)? Det är en produkt av kompilering av kod som skrivits på högnivå.NET-språk. När du kompilerar koden som skrivits på något av dessa språk får du en binärfil som är gjord av IL. Det är viktigt att observera att IL:en är oberoende av alla specifika språk som körs ovanpå körningen. det finns även en separat specifikation för det som du kan läsa om du är så benägen.

När du har skapat IL från din kod på hög nivå vill du förmodligen köra den. Det är här CLR tar över och startar processen med just-in-time-kompilering , eller JIT-ing din kod från IL till datorkod som faktiskt kan köras på en CPU. På så sätt vet CLR exakt vad din kod gör och kan hantera den effektivt.

Mellanliggande språk kallas ibland även common intermediate language (CIL) eller common intermediate language (CIL).

Ohanterad kodkompatibilitet

Naturligtvis tillåter CLR att passera gränserna mellan hanterad och ohanterad värld, och det finns mycket kod som gör det, även i .NET-klassbiblioteken. Detta kallas samverkan eller interop för kort. Med de här bestämmelserna kan du till exempel omsluta ett ohanterat bibliotek och anropa det. Det är dock viktigt att observera att när du gör detta, när koden passerar gränserna för körningen, är den faktiska hanteringen av körningen återigen i handen på ohanterad kod och faller därför under samma begränsningar.

På liknande sätt är C# ett språk som gör att du kan använda ohanterade konstruktioner, till exempel pekare direkt i kod genom att använda det som kallas osäker kontext, vilket anger en kod som körningen inte hanteras av CLR för.

Fler resurser