18 Ekim 2009 Pazar

C# 4.0 ile Dinamik Olmak

Merhabalar,
Daha önceki C# 4.0 ile ilgili yazılarımda (burada ve burada) da belirttiğim gibi C# 4.0 programlama dilinin teması Dinamik Programlama. C# programlama dilinin bugüne kadarki tüm sürümlerinde hep statik bir tip kontrolü bulunmaktaydı. Yani elimizdeki bir değişkenin ne tipte olduğu derleme zamanında biliniyordu. Böylece eğer o tipe ait olmayan bir metot çağırılırsa daha uygulama çalışmadan derleme hatası alınıyordu. Static olarak tip kontrolü yapılmasının bir takım avantajları olmasının yanında bir takım dezavantajları da mevcut. Örneğin sürekli olarak ilgili tipteki bir metodu çağırmak için dönüştürme işlemleri yapmamızın gerekmesi. Halbuki o nesnenin "Try" adında bir metodu olduğunu biliyoruz ancak o nesneyi kendi tipine çevirmeden bu metodu çağıramama gibi durum söz konusuydu.
C# 4.0 ile birlikte ise dynamic tipi kullanarak dinamik değişkenler oluşturabiliyoruz. Dynamic tipini kullanmamız dilin statikliğini yok etmiyor sadece static tip kontrolü aşamasını bypass ediyor. Çalışma zamanına kadar ise o değişkenle ilgili çalışma zamanında kullanmak üzere bilgi topluyor. Dynamic olarak tanımlanan bir değişken üzerinde istediğimiz işlemleri (Metot çağırma, Propertylerine erişme vs...) yapabiliyoruz. Derleyici bu değişkenin tipi ile ilgilenmiyor. Bu değişken bir COM API'sinde bir nesne olabilir yada HTML DOM nesnesi olabilir hiç önemli değil. Çalışma zamanına gelince ise elimizdeki değişken ilgili tipe çevriliyor ve bu tip üzerinden tanımlanan işlemler gerçekleştiriliyor. Eğer yazdığınız property yada metot o sınıfta tanımlı değilse bu sefer derleyici zamanında değil çalışma zamanında hata alıyorsunuz.
Örneğin aşağıdaki gibi bir Foo sınıfı olduğunu düşünelim.

class Foo

{

public void Test()

{

Console.WriteLine("Test Başarılı");

}

}


dynamic foo = new Foo();

foo.Test("Deneme");


Foo sınıfından türettiğimiz nesneyi dinamik olarak tanımlarsak ve Test metodunu parametresiz değil de parametreli olarak çağırırsak kod sorunsuz olarak derlenir ve çalışma zamanında RuntimeBinderException alınır.




Ayrıca dinamik tiplerle yapılan işlemlerin sonucu da bir dinamik tiptir. Örneğin dinamik olarak tanımladığımız bir değişkene herhangi bir sayıyı eklersek ve bu değeri de bir başka değişkene atmak istersek aslında dönen sonucun dinamik olduğunu mouse ile değişkenin üzerine gelerek görebiliriz.



Dinamik tiplerin kullanımına verilecek en güzel örneklerden biri de overload metotlar. Örneğin Math sınıfının içerisinde çeşitli matematik işlerini yapan pekçok metot bulunmakta. Bu metotların da aldığı parametrelere göre birçok overload tanımlanmış. Mesela Abs metodunun 6 overloadu bulunmakta. Bu overloadlar float,double,decimal gibi parametre tiplerine göre ayrı ayrı tanımlanmış. C#'ın eski sürümlerinde elimizdeki parametre tipine uygun olan metodu bulmak zorunda kalıyorduk. Ancak C# 4.0 ile beraber bu parametreyi dinamik yaparak ilgili metot seçimini tamamen derleyiciye bırakabiliyoruz.

C# 4.0 ile beraber gelen dinamik tiplerin daha pekçok kullanım alanı bulunmakta. Bir sonraki yazımda ise dinamik tiplerin COM API'leri kullanımını nasıl kolaylaştırdığından bahsedeceğim.
Görüşmek üzere,

0 yorum: