C# 4.0 ile Gelen Yenilikler
Gelen yeniliklerden önce C#’ın daha önceki sürümlerine değinmek istiyorum.
- C# 1.0 ile temel amaç yönetilen kod mekanizmasının sağlanmasıydı.
- C# 2.0 ile generic tipler kullanılmaya başlandı ve dile yeni bir esneklik getirildi.
- C# 3.0 ‘da ise LINQ mimarisi dile eklendi.LINQ ile XML,veri tabanı veya nesnelere dille entegre sorgular gönderilmesi imkanı sağlandı.
- C# 4.0 ‘da ise temel amaç dinamik programlama. Dinamik programlama için “dynamic” anahtar kelimesi getirildi.Dynamic olarak tanımlanan değişkenlerin tipleri artık runtime da belli olmakta.Bu işlemlerde DLR (Dynamic Language Runtime) kullanılarak yapılmakta. Bu noktada karıştırılabilecek tek nokta ise C# 3.0 ise gelen “var” anahtar kelimesi. Ancak “var” tipleri compile-time da belli olan tipler.Yani ne değer alacağını önceden bilebiliyoruz.
C# 4.0 ile Dinamik Programlama
Yukarıda baktığımızda dinamik olarak tanımlanmış 3 değişken görüyoruz.Bu değişkenlerin hepsine de farklı veri tiplerindeki değerler atanmış.Ancak bu değişkenler runtime da ilgili tiplere dönüştürülecekler ve ilgili değerleri alacaklar.
Runtime daki tiplerine bakarsak:
Runtime da tip1 aldığı değere göre integer tipine ,tip2 string tipine ,tip3 ise double tipine dönüştürüldü. Tabi ki burada tipler dynamic olarak tanımlandığı için üzerlerinden çağrılan metotların geçerli olup olmadıkları da runtime da belli olmakta.Bu nedenle dinamik tipler üzerinden bir metot çağırılırken metod isminin doğru yazılmasının da büyük bir önemi var.Zira intellisense yardımı bu noktada yanınızda değil.
Örneğin aşağıdaki gibi sınıflarımız olduğunu düşünelim;
Bu iki sınıfta da bulunan Goruntule metodu sınıflardaki propertyleri konsola basmakla görevliler.Dinamik programlamanın örneğini görmek için bir de rastgele bu iki classtan birini üreten bir metoda ihtiyacımız var.Bu metotta şu şekilde olacak:
Bu metodun yaptığı ise çağırıldığında 0 yada 1 olarak rastgele bir sayı üretmek ve eğer bu sayı 0 ise Urun nesnesi, 1 ise Musteri nesnesi döndürmek.
Son olarak sıra geldi metodu kullanmaya ve dynamic anahtar kelimesini daha etkin bir şekilde kullanmaya.
Burada bir for döngüsü içerisinde tanımladığımız GetRandom() metodunu çağırıyoruz.Böylece her seferinde farklı bir nesnenin dönme ihtimali bulunuyor.Bunun için dinamik bir tip ile kontrolü elimize alıyoruz ve geri dönen nesne ne olursa olsun onun Goruntule metodunu çağırıyoruz.
Bunu eğer C# 3.0 ile yapmak isteseydik her dönen sınıfın tipini if ile kontrol etmemiz daha sonra bu sınıfı ilgili sınıfa dönüştürmemiz ve en son olarak ise dönüştürdüğümüz sınıf üzerinden bu metodu çağırmamız gerekecekti.Ancak dynamic anahtar kelimesinin bize getirdikleri ile biz bu işlemi 2 satırda hallediyoruz.
Programın çıktısı ise şu şekilde olacak.Nesneleri random olarak ürettiği için sizde oluşan çıktılar farklılık gösterebilir.
Dynamic veri tipinin daha pek çok kullanım alanı olabilir.Ancak giriş niteliğinde bir yazı olduğundan basit bir örnek üzerinde bu veri tipini anlatmayı uygun gördüm.
Optional Parameters and Named Parameters Özelliği
- Optional parameters özelliği bir metot çağırımında opsiyonel parametre yaratmamıza olanak sağlamakta.Böylece ilgili metot çağırılırken opsiyonel parametreye değer atanmayabilir.Tabi böyle bir durumda değer atanmadığında kullanılacak default değeri de önceden tanımlamamız gerekiyor.
- Named parameters özelliği ise metot çağırımında artık parametreleri isimlerini yazarak göndermemize olanak sağlamakta.Böylece parametreleri artık metot imzasındaki sırayla göndermek zorunda değiliz.
Yukarıdaki yenilikleri incelemek için yine bir önceki örnekte yarattığım sınıflardan olan Urun sınıfını kullanacağım.
Öncelikle Urun sınıfına bir adet constructor ekleyeceğim ve bu constructor da ki kategori propertysine atama yapacak olan parametreyi optional parameter olarak tanımlayacağım.Böylece eğer bu parametreye bir değer atanmazsa kategori otomatik olarak Ana Kategori’ye atanmış olacak.
Kodlama kısmı ise şu şekilde olacak:
Artık bir ürün yaratıldığında eğer kategori parametresi boş geçilirse bu parametre “Ana Kategori” değerini alacaktır.
C# 3.0 ‘da yine bu işi bir if kontrolü yaparak gerçekleştirebilirdik.Ama C# 4.0 ile buna da gerek kalmıyor.Kaldı ki böyle pek çok parametre olduğunda pek çok gereksiz if kullanılacaktır.
Named parametersta ise mesela Urun yaratılırken önce adını sonra fiyatını girdik.Ancak bir named parameters ile önce fiyatını sonra adını girme imkanımız var.
Optional parameterların getirdiği bir diğer fayda ise COM objeleri ile çalışırken ortaya çıkmakta.
Daha önce uygulama tarafından ms office tarafından bir uygulama açmak veya bir takım işlemler yaptırmak için bazen pek çok parametreyi yukarıdaki gibi missing vermek zorunda kalabiliyorduk.Bu da aslında çok can sıkıcı bir durum olabilmekteydi bazen.Ancak şimdi optional ref parametreleriyle çok daha rahat bir şekilde isteğimiz işlemleri yapabilmekteyiz.
Bu yazımda özellikle bir süredir takip ettiğim C# 4.0 yeniliklerinden en çok öne çıkanları paylaşmaya çalıştım. Co-contra variance özelliğinden ise ayrı bir makalede bahsedeceğim.
Yukarıdaki örnekleri buradan indirebilirsiniz.Uygulamayı çalıştırmak için bilgisayarınıza .NET Framework 4.0 Beta kurmanız ve uygulamayı değiştirmek için ise Visual Studio 2010 Beta 1 kurmanız gerekmekte.
kaynak:http://ilkayilknur.blogspot.com/2009/08/c-40-yenilikleri-dynamic-anahtar.html
Son yorumlar