1 Şubat 2015 Pazar

Cast etmek mi, as kullanmak mı?

Değerli yazılımcı kardeşlerim, bir önceki yazımızda 'is' ve 'as' keywordlerinin kullanımından bahsetmiştik. ( c# keywordleri is as ) Tekrar hatırlatmak gerekirse, is anahtar kelimesi bir nesnenin belirtilen herhangi bir sınıfa ait olup olmadığını kontrol ediyordu. as ise bir nesneyi belirtilen bir sınıfa cast ederek ele alıyordu.

Şimdi aklınıza ne gerek vardı as anahtar kelimesine, zaten nesnenin başına sınıf ismini yazarak cast edebiliyorduk gibi sorular gelebilir. Elbette ki ikisi arasında bir fark vardır. Gelin bu iki işlem arasındaki farkı örneklerle açıklayalım.

Öncelikle as anahtar kelimesinin kullanımına bakalım:



    public static void asOrCast1(object sender)
    {
        /// as keyword'u eğer başarısız olursa
        /// geriye null döndürür
        Rectangle r = sender as Rectangle;
        if (r != null)
            Console.WriteLine("islem tamam");
        else
            Console.WriteLine("sender Rectangle degildir!");
    }

Yukarıdaki metodumuzda object tipinden bir argüman alıp as ise Rectangle sınıfına cast ediyoruz.
Eğer sender isimli argümanımız gerçekten Rectangle sınıfına ait ise cast işleminden dönen değer null olmayacaktır, eğer null dönerse bu nesne Rectangle sınıfına ait değildir diyebiliriz.
Aşağıdaki kod parçası ile kontol edersek ekranımıza "islem tamam" yazdırılacaktır.

    Rectangle r = new Rectangle();
    asOrCast1(r);


İkinci metodumuzda ise klasik cast işlemini ele alacağız.

    public static void asOrCast2(object sender)
    {
        /// cast işlemi başarısız olursa program hata verir
        Rectangle r = (Rectangle)sender;
        Console.WriteLine("islem tamam");
    }

sender nesnesi Rectangle sınıfına ait ise başarılı bir şekilde cast işlemi yapılır. Eğer farklı bir sınıfa ait ise programımız InvalidCastException sınıfından bir hata mesajı verecektir. Aşağıdaki kod parçası ile bu metodu çağıralım.

    Product p = new Product();
    asOrCast2(p);

Ekran görüntüsü aşağıdaki gibi olacaktır.






Hiç yorum yok:

Yorum Gönder