Makale Özeti

C# 3.0 ve getirdiği yenilikler...

Makale

C# 3.0 , yine kendi framework u .NET Framework 3.0 ile gelecek olan c# dilinin yeni versiyonudur. Bu yeni kullanımı şu anki CTP ler yardımıyla inceleme fırsatı bulabiliyoruz fakat asıl kullanımına Visual Studio Orcas ile 2007 nin sonlarına doğru adım atmış olacağız. Öncelikle C# 3.0 ile C# diline neler eklenmiş onları görelim.

1.Bölüm

1)     Belirtilmemiş Tipte Değişkenler (Implicitly Typed Variables)

2)     İlave Metodlar (Extension Methods)

2.Bölüm

3)      Yeni Nesne İlklendirme Metodları (Object and Collection Initializers)

4)      Belirsiz (Adsız) Tipler (Anonymous Types)

5)      Belirtilmemiş Tipte Diziler (Implicitly Typed Arrays)

3. Bölüm

6)      Lambda  Tanımları(Lambda Expressions)

7)      Tanım Ağaçları (Expression Trees)

4.Bölüm

8)      Yeni Veritabanı  Sorgulama Tanımları (LINQ, XLINQ ve DLINQ)

Burdaki bölümden kasıt aralıklarla eklemek istediğim başlıklardır.Şu durumda 1. bölüm ile başlayalım.

1        Belirtilmemiş Tipte  Değişkenler (Implicitly Typed Variables)

Belirtilmemiş tipte değişkenler var niteleyicisi ile tanımlanan ve derleme esnasında  derleyicinin tipinin ne olduğuna karar verdiği değişkenlerdir. Derleyicinin bu kararı verirken  yazılımı esnasında uyulması gereken bazı kurallar vardır.Tipi belirtilmeden tanımlanan bir değişken  herhangi bir tipteki nesne veya nesneler dizisine eşlenerek tip atamasına tabi tutulur.

 

Kullanımı :

 

var SehirAd_1 = "İstanbul"; //string

var SehirAd_2 = "Ankara";   //string

var SehirAd_3 = "İzmir";    //string

var IstanbulPlakaKod = 34; //int

var Sehirler = new string[] {SehirAd_1, SehirAd_2, SehirAd_3}; //string dizisi

foreach (var SehirAd in Sehirler)

{

MessageBox.Show(SehirAd);

}

Bu örnekte dikkati çekecek olan bir diğer önemli nokta değişkenleri tanımlamanın yanısıra herhangi bir koleksiyon içerisinde foreach ile dönerek nesneleri var tanımıyla alabilmemizdir.

Ne Getiriyor ?

var niteleyicisinin C# 3.0 Yenilikler dizisinin ilerleyen bölümlerinde bahsedilecek olan LINQ ile birlikteliği özellikle bu tip sorgulardan dönen sonuçların uygulama içerisinde kullanımında kolaylık oluşturmaktadır.

var Sehirler = from SehirAd in SehirListesi

               select SehirAd;

Yine daha sonraki bölümlerde incelenecek olan Anonymous Types (Belirsiz Tipler) ve Implicitly Typed Arrays  
(Belirtilmemiş Tipte Diziler) i kullanırken var niteleyicisine ihtiyaç duyacağız.
-     Belirsiz Tipler için örnek -
      var Ilce1 = new { Ad = "Şişli",Nufus = 2000000}; 
-     Belirtilmemiş Tipte Diziler’e örnek -
               var stringDizisi = new[] {"CSHARP","3.0"};

C# 3.0 ile yeni bir anlam kazanan var niteleyicisi daha önceden kullanılan var ile aynı kullanıma sahip değil.Önceki VB6 kullanımında herhangi bir tipte olabilen ve memory de oldukça yer kaplayan bu değişken tanımlaması C# 3.0 içerisinde kendi tipini derleme esnasında alıyor ve uygulamaya ekstra bir yük bindirmiyor.

 

Zorunluluklar :

                                I.            Belirtilmemiş tipte değişkenler tanımlarken mutlaka bir  nesne ile ilklendirilmelidir.

var integerTanimi = 2007;

               var stringTanimi = "İkiBinYedi";

                             II.            İlklendirici mutlaka tanımlanmalıdır.Tipinin ne olduğu bilinmelidir.                 

var integerTanimi = 2007; //derleme sırasında int

               var stringTanimi = "İkiBinYedi"; //derleme sırasında string

                           III.            Belirtilmemiş tipte değişkenler “null” olarak tanımlanmamalıdır.

 

   var integerTanimi = null; //Hata : Cannot infer local variable type from 'null'

 

                          IV.            Belirtilmemiş tipte değişkenler sürekli olarak aynı tipte değişkenlik durumunu korumalıdır.

   var integerTanimi = 2007;

   var integerTanimi = "İkiBinYedi"; //Hata : Cannot implicitly convert type 'string' to 'int'

 

 

 

      2        İlave Metodlar (Extension Methods)

 

Kontrol edemediğimiz (erişemediğiniz) bir base sınıfınız olduğunu düşünün ve bu sınıfa işinize yarayacak yeni bir fonksiyon eklemek istiyorsunuz. Örneğin string tipindeki herhangi bir değişkeni ToInt32 gibi kendine ait bir fonksiyonla integer e çevirmek istiyorsunuz.Daha önceden yapamadığımız bu işlemleri artık İlave Metodlar yardımı ile yapabileceğiz.

 

Kullanımı:

 

Varolan (Framework’un kullandığı) veya sonradan oluşturulmuş tiplere yeni metodlar ekleyerek kullanılmasını sağlıyor.Özellikle .NET içerisinde kullandığımız tiplere (string,int,bool) yeni metodlar eklememize imkan vermesi  işimizi oldukça kolaylaştırıyor.Bir örnekle konuyu biraz daha açmaya çalışalım.

 

Önceki örneğimizde şehirler listesi içerisinde var  tanımlı nesne ile şehir adlarını almıştık burada ise ilave metodlar ve belirtilmemiş tipte değişkenleri aynı anda kullanarak bu şehirlerin plaka kodlarını almaya çalışacağız.

 

İlave Metodlar için oluşturulan sınıf yapımız :

public static class IlaveMetodlar

      {

            public static int ToPlakaKod(this string SehirAd)

{

                  switch (SehirAd)

                  {

                        case "İstanbul":

                              return 34;

                        case "Ankara":

                              return 6;

                        case "İzmir":

                              return 35;

                        default:

                              return 0;

                  }

            }

}

 

Görüldüğü üzere ilave metodlar sınıfımızı static olarak tanımladığımız gibi içerisindeki diğer prosedürleride static olarak tanımlamamız gerekmekte.Bunun haricinde parametremizin önüne gelen this  niteleyicisi ise ilave metodumuzu tanımlamamıza yarıyor.Şimdi belirtilmemiş tipte değişkenlerin ve ilave metodların beraber kullanımına göz atalım.

 

Önceki örneğimizde Sehirler  içerisindeki Sehir adlarını mesaj olarak kullanıcıya göstermiştik.Şimdi aynı işlemi yukarıdaki sınıfımız yardımıyla şehirlerin plaka kodlarını göstererek yapalım.

foreach (var SehirAd in Sehirler)

{

MessageBox.Show(SehirAd.ToPlakaKod().ToString());

}

 

Görüldüğü gibi şehir adlarını kullanarak aynı şehirlerin plaka kodlarını ekranda gösterdik.

 

Zorunluluklar :

 

                                I.            İlave metodlar sınıfı  mutlaka static bir sınıf olarak tanımlanmalıdır.

                             II.            İlave metodlar sınıfı içerisindeki her metod yine static olarak tanımlanmalıdır.

                           III.            Her metoda this niteleyicisi ile ilave metodun kullanılacağı nesne tipi belirtilmelidir.

                          IV.            İlave metodlar aynı isim uzayı içerisindeki tanımlar ile herhangi ekstra bir işleme gerek kalmadan kullanılabilir.Farklı uzay isimleri altındaki kullanımı için ise using ifadesi ile ilave metodların bulunduğu isim uzayı eklenmelidir.

                             V.            İlave metodlar aşırı yüklenmiş olarak kullanılabilir.Fakat tanımlandığı sınıf içerisinde aynı isimde bir metod mevcut ise bu metod ilave metodu ezecektir (override).

               Ejder KUVEMLİ

              ekuvemli@hotmail.com