0Pricing
C# Academy · Pelajaran

Boxing dan Unboxing

Pahami biaya konversi ke object.

Boxing dan Unboxing adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Apa Itu Pembungkusan?

Pembungkusan membungkus jenis nilai di dalam objek agar dapat diperlakukan sebagai jenis referensi. object o = 5; membungkus int ke dalam memori tumpukan.

using System;

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

Mengapa Pembungkusan Terjadi

Pembungkusan terjadi setiap kali jenis nilai ditetapkan ke variabel bertipe object (atau antarmuka). Saat program berjalan, memori tumpukan dialokasikan untuk menyimpan salinan nilai tersebut.

using System;

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

Apa Itu Pembongkaran?

Pembongkaran mengambil kembali jenis nilai dari kotaknya menggunakan konversi eksplisit. Jenis konversi harus sama persis dengan jenis yang dibungkus.

using System;

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

Pembongkaran Memerlukan Jenis yang Tepat

Anda harus membongkar ke jenis asli yang sama persis. Membongkar ke jenis lain akan menimbulkan 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");
        }
    }
}

Pembungkusan Membuat Salinan

Pembungkusan menyalin nilai tersebut. Perubahan pada nilai asli setelahnya tidak akan mengubah salinan yang dibungkus.

using System;

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

Biaya Pembungkusan

Setiap pembungkusan mengalokasikan memori tumpukan dan menambah beban pengumpulan sampah. Dalam perulangan yang sering dijalankan, beban ini dapat menurunkan kinerja secara signifikan.

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);
    }
}

Menghindari Pembungkusan dengan Generik

Koleksi generik seperti List<int> menyimpan jenis nilai tanpa pembungkusan, berbeda dari ArrayList lama yang tidak generik.

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);
    }
}

Pembungkusan dengan Antarmuka

Menetapkan struktur ke variabel antarmuka juga membungkusnya, karena referensi antarmuka harus menunjuk ke objek di memori tumpukan.

using System;

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

Mendeteksi Jenis yang Dibungkus

Anda dapat memeriksa jenis objek yang dibungkus saat program berjalan menggunakan is sebelum membongkarnya dengan aman.

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");
    }
}

Pembungkusan dalam Penggabungan Teks

Menggabungkan jenis nilai dengan teks dapat membungkusnya. Menggunakan interpolasi atau ToString sering kali lebih jelas, meskipun pembungkusan dalam kasus ini biasanya tidak berarti.

using System;

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

Merangkum Semuanya

Pembungkusan menjembatani dunia jenis nilai dan jenis referensi, tetapi memerlukan alokasi. Utamakan generik untuk menghindarinya, lalu bongkar ke jenis yang sama persis setelah melakukan pemeriksaan yang aman.

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);
    }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang pembungkusan dan pembongkaran.

Ringkasan

Pembungkusan membungkus jenis nilai dalam objek di memori tumpukan (misalnya object o = 5;), sedangkan pembongkaran mengambilnya dengan konversi eksplisit ke jenis asli yang sama persis. Pembungkusan menyalin nilai dan mengalokasikan memori sehingga menambah beban pengumpulan sampah. Utamakan koleksi generik seperti List<int> untuk menghindari pembungkusan, dan gunakan is untuk pembongkaran yang aman.

using System;

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

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Boxing dan Unboxing” gratis?

Ya — teks lengkap “Boxing dan Unboxing” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Boxing dan Unboxing”?

Pahami biaya konversi ke object. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Boxing dan Unboxing” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tipe Nilai vs Tipe Referensi
  2. Boxing dan Unboxing
  3. Konversi Implisit dan Eksplisit
  4. Kelas Convert dan Parsing
← Kembali ke C# Academy