0Pricing
C# Academy · Ders

Boxing ve Unboxing

object türüne dönüştürmenin maliyetini anlayın.

Boxing ve Unboxing, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Kutulama Nedir?

Kutulama, bir değer türünü referans türü gibi kullanılabilmesi için bir nesnenin içine sarar. object o = 5; ifadesi int değerini öbek bellekte kutular.

using System;

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

Kutulama Neden Gerçekleşir

Bir değer türü object türündeki bir değişkene (veya bir arabirime) atandığında kutulama gerçekleşir. Çalışma zamanı, değerin bir kopyasını içeren bir kutu için öbek bellekte yer ayırır.

using System;

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

Kutudan Çıkarma Nedir?

Kutudan çıkarma, açık bir tür dönüştürmesiyle değer türünü kutudan geri alır. Dönüştürme türü, kutulanan türle tam olarak eşleşmelidir.

using System;

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

Kutudan Çıkarma Doğru Türü Gerektirir

Değeri tam olarak özgün türüne dönüştürerek kutudan çıkarmalısınız. Farklı bir türe kutudan çıkarma işlemi InvalidCastException oluşturur.

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

Kutulama Kopya Oluşturur

Kutulama değeri kopyalar. Daha sonra özgün değeri değiştirmek, kutulanmış kopyayı değiştirmez.

using System;

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

Kutulamanın Maliyeti

Her kutulama öbek bellekte yer ayırır ve çöp toplama yükünü artırır. Sık çalıştırılan döngülerde bu ek yük performansı önemli ölçüde düşürebilir.

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

Genel Türlerle Kutulamadan Kaçınma

List<int> gibi genel tür kullanan koleksiyonlar, eski genel tür kullanmayan ArrayList'in aksine değer türlerini kutulamadan saklar.

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

Arabirimlerle Kutulama

Bir yapıyı bir arabirim değişkenine atamak da onu kutular; çünkü arabirim başvurusunun bir öbek bellek nesnesini göstermesi gerekir.

using System;

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

Kutulanmış Türleri Algılama

Kutudan güvenle çıkarmadan önce, çalışma zamanında kutulanmış bir nesnenin türünü is ile kontrol edebilirsiniz.

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

Metin Birleştirmede Kutulama

Bir değer türünü metinlerle birleştirmek onu kutulayabilir. Araya yerleştirme kullanmak veya ToString çağırmak çoğu zaman daha açıktır; ancak buradaki kutulamanın etkisi genellikle önemsizdir.

using System;

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

Hepsini Bir Araya Getirme

Kutulama, değer ve referans dünyaları arasında bağlantı kurar ancak bellek ayırma maliyeti getirir. Bundan kaçınmak için genel türleri tercih edin ve güvenli bir denetim yaparak tam türüne kutudan çıkarın.

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

Hızlı Kontrol

Kutulama ve kutudan çıkarma konusundaki anlayışınızı sınayın.

Özet

Kutulama, bir değer türünü öbek bellekteki bir nesnenin içine sarar (ör. object o = 5;); kutudan çıkarma ise açık bir tür dönüştürmesiyle değeri tam olarak özgün türüne geri alır. Kutulama değeri kopyalar ve bellek ayırır; bu da çöp toplama yükünü artırır. Kutulamadan kaçınmak için List<int> gibi genel tür kullanan koleksiyonları tercih edin ve güvenli kutudan çıkarma için is kullanın.

using System;

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

Sıkça Sorulan Sorular

“Boxing ve Unboxing” dersi ücretsiz mi?

Evet — “Boxing ve Unboxing” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Boxing ve Unboxing” dersinde ne öğreneceğim?

object türüne dönüştürmenin maliyetini anlayın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Boxing ve Unboxing” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Değer Türleri ve Başvuru Türleri
  2. Boxing ve Unboxing
  3. Örtük ve Açık Dönüşümler
  4. Convert Sınıfı ve Ayrıştırma
← C# Academy Sayfasına Dön