C# Academy · Les

Boxing en unboxing

Krijg inzicht in de kosten van converteren naar object.

Les 2 van 413 stappen

Boxing en unboxing is een gratis C# Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 4 lessen.

Wat is boxing?

Boxing verpakt een waardetype in een object, zodat het als referentietype kan worden behandeld. Met object o = 5; wordt de int op de heap geplaatst.

using System;

class Program
{
    static void Main()
    {
        int n = 5;
        object o = n;   // boxing
        Console.WriteLine("Boxed value: " + o);
    }
}

Waarom boxing gebeurt

Boxing gebeurt telkens wanneer je een waardetype toewijst aan een variabele van het type object (of aan een interface). De runtime reserveert een vak op de heap waarin een kopie van de waarde staat.

using System;

class Program
{
    static void Main()
    {
        double d = 3.14;
        object boxed = d;   // boxing copies d into a heap object
        Console.WriteLine(boxed);
    }
}

Wat is unboxing?

Unboxing haalt het waardetype met een expliciete cast weer uit het vak. Het type van de cast moet exact overeenkomen met het type dat is ingepakt.

using System;

class Program
{
    static void Main()
    {
        object o = 42;        // boxing
        int n = (int)o;        // unboxing
        Console.WriteLine("Unboxed: " + n);
    }
}

Voor unboxing is het juiste type nodig

Je moet unboxen naar exact het oorspronkelijke type. Unboxen naar een ander type veroorzaakt InvalidCastException.

using System;

class Program
{
    static void Main()
    {
        object o = 100;
        try
        {
            long wrong = (long)o;   // InvalidCastException at runtime
            Console.WriteLine(wrong);
        }
        catch (InvalidCastException)
        {
            Console.WriteLine("Must unbox to int, not long");
        }
    }
}

Boxing maakt een kopie

Bij boxing wordt de waarde gekopieerd. Als je het origineel daarna wijzigt, verandert de ingepakte kopie niet.

using System;

class Program
{
    static void Main()
    {
        int n = 1;
        object o = n;   // box copies 1
        n = 99;
        Console.WriteLine("original=" + n + ", boxed=" + o);
    }
}

De kosten van boxing

Elk vak reserveert geheugen op de heap en verhoogt de belasting voor garbage collection. In intensief uitgevoerde lussen kan deze overhead de prestaties aanzienlijk verminderen.

using System;

class Program
{
    static void Main()
    {
        // Each iteration boxes an int -> many heap allocations
        object sumBox = 0;
        for (int i = 0; i < 5; i++)
        {
            int current = (int)sumBox + i;
            sumBox = current;   // box again
        }
        Console.WriteLine("Result: " + sumBox);
    }
}

Boxing vermijden met generics

Generieke verzamelingen zoals List<int> slaan waardetypen op zonder boxing, in tegenstelling tot de oude niet-generieke ArrayList.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var list = new List<int>();   // no boxing
        list.Add(1);
        list.Add(2);
        int first = list[0];           // no unboxing
        Console.WriteLine("First: " + first);
    }
}

Boxing met interfaces

Als je een struct toewijst aan een interfacevariabele, wordt deze ook geboxed, omdat de interfacereferentie naar een object op de heap moet verwijzen.

using System;

class Program
{
    static void Main()
    {
        int n = 7;
        IComparable c = n;   // boxing to interface
        Console.WriteLine(c.CompareTo(10));
    }
}

Geboxte typen herkennen

Je kunt het type van een geboxed object tijdens runtime controleren met is voordat je het veilig unboxt.

using System;

class Program
{
    static void Main()
    {
        object o = 3.5;
        if (o is double d)
            Console.WriteLine("It is a double: " + d);
        else
            Console.WriteLine("Not a double");
    }
}

Boxing bij het samenvoegen van tekenreeksen

Als je een waardetype met tekenreeksen samenvoegt, kan het worden geboxed. Interpolatie of ToString gebruiken is vaak duidelijker, hoewel boxing hier meestal verwaarloosbaar is.

using System;

class Program
{
    static void Main()
    {
        int count = 3;
        string msg = "Count is " + count;   // count is converted
        Console.WriteLine(msg);
    }
}

Alles bij elkaar

Boxing overbrugt de werelden van waarden en verwijzingen, maar kost geheugenreserveringen. Gebruik bij voorkeur generics om boxing te vermijden en unbox naar exact het juiste type met een veilige controle.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        object boxed = 256;
        if (boxed is int value)
            Console.WriteLine("Safely unboxed: " + value);

        var noBox = new List<int> { 1, 2, 3 };
        Console.WriteLine("Generic count: " + noBox.Count);
    }
}

Korte test

Test je begrip van boxing en unboxing.

Samenvatting

Boxing verpakt een waardetype in een object op de heap (bijvoorbeeld object o = 5;); unboxing haalt het er met een expliciete cast naar exact het oorspronkelijke type weer uit. Boxing kopieert de waarde en reserveert geheugen, waardoor de belasting voor GC toeneemt. Gebruik bij voorkeur generieke verzamelingen zoals List<int> om boxing te vermijden en gebruik is voor veilig unboxen.

using System;

class Program
{
    static void Main()
    {
        object boxed = 42;     // box
        int n = (int)boxed;     // unbox
        Console.WriteLine(n);
    }
}
Gratis beginnen

Leer C# met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
93
Lessen
346

Veelgestelde vragen

Is de les “Boxing en unboxing” gratis?

Ja — de volledige tekst van “Boxing en unboxing” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 4 lessen.

Wat leer ik in “Boxing en unboxing”?

Krijg inzicht in de kosten van converteren naar object. Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C# Academy te beginnen?

Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Boxing en unboxing”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C# Academy?

Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Waardetypen versus referentietypen
  2. Boxing en unboxing
  3. Impliciete en expliciete conversies
  4. De klasse Convert en parsen
← Terug naar C# Academy