Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
   
Konu: C# - Unboxing İşlemi {14}
Hera
*
avatar
Yüzbaşı
Durum: Çevrimdışı
Seviye Puanı: 8
Yaşam Puanı: 193 / 193
Deneyim: 73 / 100
Rep Sayısı: 27
Mesaj Sayısı: 95
Üyelik Tarihi: 13.04.2019
     
Yorum: #1
C# - Unboxing İşlemi {14}
09.05.2019 20:03
Unboxing işlemi boxing işleminin tamamen tersidir. Yani heap bölgesindeki bir nesnenin değeri bit olarak stack bölgesine kopyalanır. Böylece referans türünü değer türüne dönüştürmüş oluruz. Bu işleme de unboxing işlemi denilmektedir.

Unboxing işlemi çalışma zamanında (run-time) hata vermemesi için sağlanması gereken iki önemli koşul vardır. Bunlar;
  1. Unboxing işlemine tabi tutulacak nesnenin daha önceden boxing işlemine tabi tutulmuş olması.
  2. Boxing işlemine tabi tutulmuş olan bu nesnenin unboxing işlemi sırasında doğru türe dönüştürülmesidir.
Şimdi birer örnekle bu iki durumu açıklayayım. Öncelikle unboxing işlemi bilinçsiz bir şekilde yapılmaz. Bu yüzden tür dönüşümü operatörü kullanılmalıdır. Örneğin daha önceden object türüne dönüştürülmüş bir nesne aşağıdaki şekilde unboxing işlemine tabi tutulur.

int i = 50;
object a = i;
int j = (int)a;


Boxin ve Unboxing işleminden sonra nesnelerin değerlerini korunacağı kesindir. Bu durum test etmek için aşağıdaki programı derleyip çalıştırın.
Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main()
        {
            int i = 10;
            object a = i;
            int j = (int)a;
            Console.WriteLine(i);
            Console.WriteLine(j);
        }
    }
}

Bu programı çalıştırdığımızda aşağıdaki ekran görüntüsünü elde ederiz;


Programı aşağıdaki şekilde değiştirip derlediğimizde ise çalışma zamanında yanlış tür dönüşümü (InvalidCastException) hatası alacaksınız.
Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main()
        {
            int i = 10;
            object a = i;
            int j = (byte)a;
            Console.WriteLine(i);
            Console.WriteLine(j);
        }
    }
}
Alinti
DeathWing
*
avatar
Yüzbaşı
Durum: Çevrimdışı
Seviye Puanı: 8
Yaşam Puanı: 194 / 194
Deneyim: 78 / 100
Rep Sayısı: 23
Mesaj Sayısı: 96
Üyelik Tarihi: 26.03.2019
     
Yorum: #2
RE: C# - Unboxing İşlemi {14}
10.05.2019 14:23
Teşekkürler, Emeğine Sağlık Smile
Alinti



1 Ziyaretçi