Kutulama ve Kutudan Çıkarma [17]

Daha önce de açıkladığımız gibi, değer tipleri de dahil olmak üzere tüm C# tipleri object'ten türetilirler. Bu nedenle, object tipine yapılan bir referans, değer tipleri de dahil olmak üzere tüm tiplere referansta bulunmak üzere kullanılabilir. Bir object referansı bir değer tipine referansta bulunduğunda kutulama(boxing) denilen bir süreç işler. Kutulama, bir değer tipinin değerinin bir nesne örneğinde depolanmasına neden olur. Dolayısıyla, bir değer tipi bir nesnenin içine "kutulanır". Bu nesne, diğer herhangi bir nesne gibi kullanılabilir. Kutulama her zaman
otomatik olarak yapılır. Sizin tek yapmanız gereken bir object referansına bir değer atamaktır. Gerisini C# halleder.

Kutudan Çıkarma(unboxing) ise bir nesneden bir değer okuma işlemdir. Bu işlem, object referansından istenen değer tipine bir tip ataması kullanılarak gerçekleştirilir.

Kutulama ve kutudan çıkarma işlemlerine bir basit örnek:

//basit bir kutulama/kutudan cikarma ornegi
using System;

class BoxingDemo {
public static void Main() {
int x;
object obj;
x = 10;
obj = x; // x'i bir nesneye kutula
int y = (int)obj; // obj'i kutudan cikararak bir int'e ata
Console.WriteLine(y);
}
}

Ekrana çıkan değer 10'dur.
Başka bir örnek:

// kutulama, deger aktarirken de meydana gelir.
using System;

class BoxingDemo {
public static void Main() {
int x;
x=10;
Console.WriteLine("Here is x: " + x)
;
// x, sqr()'e aktarildiginda otomatik olarak kutulanir.
x=BoxingDemo.sqr(x);
Console.WriteLine("Here is x squared: " + x);
}

static int sqr(object o) {
return (int)o*(int)o;
}
}

Çıktı:

Here is x: 10
Here is x squared: 100

Buradaki x'in değeri sqr()'e aktarıldığında otomatik olarak kutulanmaktadır.
Kutulama ve kutudan çıkarma işlemleri, C#'ın tip sisteminin tümüyle tek standarda uymasını sağlar. Tüm tipler object'ten türetilir. Herhangi bir tipe yapılacak referansa bir object referansı atanabilir. Kutulama/Kutudan çıkarma, bu işin değer tipleriyle ilgili kısmını otomatik
olarak halleder. Daha da ötesi, tüm tipler object'ten türetildikleri için, tiplerin tümü object'in metotlarına erişebilir. Örnek:

//kutulama, metotlari bir deger uzerinden cagirmaya olanak verir.
using System;

class MethOnValue {
public static void Main() {
Console.WriteLine(10.ToString());
}
}

Ekrana 10 çıktısı gelecektir. Çünkü ToString() metodu, üzerinden çağrıldığı nesnenin karakter katarı cinsinden ifade edilmiş biçimini döndürür. Bu durumda 10'un karakter cinsinden ifadesi 10'dur.

Kayna: Herbert Schildt
Herkes için C#

Hiç yorum yok:

Yorum Gönder