2. Tür Dönüşümleri

Tür dönüşümünde dönüşüm yapılacak veri türlerinin kapasiteleri önemlidir. Küçük kapasiteli bir veri türü sorunsuzca büyük kapasiteli bir veri türüne dönüştürülebilirken, bunun tersi bu durumda veri kaybı söz konusu olabilir.

Bilinçsiz Tür Dönüşümü (İmplict) : Küçük kapasiteli bir değişken tipinin büyük kapasiteli bir değişken tipine dönüştürülmesi bilinçsiz tür dönüşümüdür. Çünkü herhangi bir veri kaybı söz konusu değildir.

Örnek :       byte  a;
                      int b;
                      a= 10;
                      b=a;

Bilinçli Tür Dönüşümü (Explicit) : Büyük kapasiteli bir değişken tipini küçük kapasiteli bir tipe dönüştürmektir ki burada veri kaybı olacağından bu işlem engellenmiştir. Fakat oluşabilecek veri kaybının farkında olarak bu işlem gerçekleştirilebilir.

Örnek :     int a;
                    byte b; 
                    a= 350;
                    b = (byte) a;

Eper a değişkeninin değeri 255’in üzerinde olursa veri kaybı gerçekleşir. 255ten sonra 0a döner ve tekrar saymaya başlar. 355 için veri kaybına uğramış değer 94 olur. Bazen veri kaybı olacağı bu kadar bariz belli olmayabilir ve biz veri kaybı olduğunda hata gösterilmesi isteyebiliriz. Bunu da aşağıdaki şekilde yaparız ;

 Örnek :     int a;
                     byte b;
                     a = 450;
                     checked
                     {
                         b = (byte)a;
                     }

 

  • String tipi  metinsel ise herhangi bir sayısal ifadeye dönüştürülemez hata ile karşılaşılır.
  • Char tipi tamsayı değerine çevrilirken ascii kod karşılığı değer olarak döndürülür.Tür Dönüşümü için Convert sınıfı kullanılabilir.

Örnek :     int a;
                    string b;
                    b = “5”;
                    a = Convert.ToInt32(b);

Yukarıdaki stringin int’e çevrilmesinde herhangi bir sıkıntı yoktur. 5 değerini çevirir ancak string metinsel ise tipi herhangi bir sayısal ifadeye dönüştürülemez hata ile karşılaşılır.

Boxing ve Unboxing Kavramları

Değer tipinin referans tipine dönüştürülmesi boxing işlemidir. Tersi ise unboxing.

static void Main(string[ ] args)
{
      int a=10;

      object b=a;  //Boxing

      int c = (int)b;  //unboxing
}