9 Ekim 2011 Pazar

C# Is ve As Operatörleri

Program yazarken başımıza gelen en büyük sorunlardan biri tip uyuşmazlığı sebebiyle aldığımız hatalardır. Ufak gibi gözüken bu hatalar, çalışma zamanında aldığımız exception’lar sebebiyle sıkça başımızı ağrıtır. Örneğin cast işlemi ile atamalar gerçekleştirdiğimizde tip uyuşmazlığı durumunda hata mesajı ile karşılaşırız. Örnek üzerinden gidersek daha anlaşılır olacağını düşünüyorum.

class Program

    {

        static void Main(string[] args)

        {

            object prog = new Program();

           

            string s = (string)prog;

        }

    }

Yukarıdaki kodu çalıştırdığımızda, “invalid cast exception” başlığı ve devamında “Unable to cast object of type 'IsVeAsOperator.Program' to type 'System.String'.” mesajı ile karşılaşırız. Anlamı ise, “Program tipi, string tipine cast edilemez” şeklinde yorumlanabilir. Bu hatayı önlemek için As operatörünü tercih edebiliriz. Eğer tip uyuşmazlığı riski varsa, bu operatörü kullanarak exception alınmamasını sağlayabiliriz. Kodumuzu aşağıdaki gibi değiştirelim.

class Program

    {

        static void Main(string[] args)

        {

            object prog = new Program();

 

            string s = prog as string;

 

            if (s == null)

            {

                Console.WriteLine("geçerli bir string girilmedi.");

            }

            else

            {

                Console.WriteLine("uygun bir tip ile atama gerçekleştirildi.");

            }

        }

    }

Bu durumda, s değişkenine geçerli bir değer gelmesse, null atanır. Dolayısıyla bir alt satırda gerekli null kontrolünü yaparak geçerli bir değer gelip gelmediğini kontrol edebiliriz.

NOT: as operatörü yalnızca referans türlü tipler ile kullanılabilir. Eşitliğin sağ tarafından geçerli bir tip gelmesse null atanmasını sağlar. Değer türlü tipler null alamadığından ötürü bu operatör ile kullanılamazlar.

is operatörü ise çalışma anında işaret edilen nesnenin tipini kontrol etmemizi sağlar. Yukarıdaki örnek üzerinden devam edelim.

class Program

    {

        static void Main(string[] args)

        {

            object prog = new Program();

             

            if (prog is object)

            {

                Console.WriteLine("Zaten .Net de herşey bir object değil midir ? :)");

            }

 

            if (prog is Program)

            {

                Console.WriteLine("prog adlı değişken Program tipinden bir nesneyi işaret etmektedir.");

            }

        }

    }



0 yorum:

Yorum Gönder