Checked ve Unchecked
Tür dönüşümlerinde veri kayıplarında programa hata uyarısı verdirebilmek için checked deyimi kullanılır. Checked anahtar sözcüğü ile çalışma zamanında oluşabilecek veri kayıplarının olabileceği durumlarda hata vermesini sağlayabiliriz.
// unchecked checked işlemini ters çevirir.
using System;
class turdonusum {
static void Main() {
int i=256;
byte b;
checked { //Taşma olduğundan program hata verir.
b=(byte) i;
}
Console.WriteLine(b);
}
}
Checked bir blok oluşturduğu için içinde yapılan değişken tanımlamaları dış bloklarda kullanılamaz. Normal şartlarda yapılan işlemler “unchecked”’dir Böyle bir ifadenin konmasının nedeni uzun “checked” blokların oluşturulması istenebilir. Bu durumlarda çok fazla blok oluşturmamak için “unchecked” ifadesi kullanılabilir.
Referans ve Değer Türleri Arasındaki Dönüşüm
Temel veri türleri de dahil olmak üzere bütün veri tipleri object denilen bir referans türünden türemiştir. Türeme, kalıtım yolu ile olduğu için var olan özellikler her zaman korunur. C#’ta herşey nesne(object) referans türünden türetilmiştir. Temelde bir sınıf vardır. Örneğin object sınıfının ToString() metodu bütün temel veri ve referans türlerinde kullanılır.
.ToString() metodu bütün temel türlerde ya da referans türlerde kullanılabilir. Amacı ise string’e dönüşüm işlemdi yapmaktır.
int b=7;
string b1=b.ToString();
Boxing İşlemi
Günümüzdeki popüler dillerde referans ve değer tipleri arasında dönüşüm yapılmamaktadır. Böyle bir çevrime ihtiyaç duyulduğunda “Boxing” kutulama yapılır. Bu yöntem değer tipindeki verileri “object” nesnesine çevirir. Bir değer tipini referans tipe atadığımızda stack’teki bilgi bit olarak heap’e kopyalanır ve stack’teki object türünden olan değişken heap’i gösterecek şekilde ayarlanır.
Örn: Bilinçsiz boxing işlemi.
int i=50; //değer tipi
object o=i; //boxing
Unboxing İşlemi
Heap alanındaki nesnelerin değerlerinin bit olarak stack bölgesine kopyalanması işlemine “unboxing” adı verilir. Boxing işleminin tam tersidir. Bu işlem sonucunda referans türler değer türüne dönüştürülmüş olur. Aşağıdaki koşullara uyularak yapılmalıdır.
· Unboxing işlemine tabi tutulacak nesnenin daha önceden boxing işlemine tabi tutulmuş olması gerekir.
· Boxing işlemine tabi tutulmuş olan bu nesnenin unboxing işlemi sırasında doğru türe dönüştürülmesidir
Unboxing işlemi bilinçsiz bir biçimde yapılmaz, mutlaka tür dönüşüm operatörü kullanılmalıdır.
Örn: int i=50;
object o=i;
int j=(int)o;
Bir yanıt yazın