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.

 

     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)

 

 

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

 

En  beğendiğim yeniliklerden biri olan yeni ilklendirici metodlar oldukça zaman kazandıracak gibi görünüyor.Bir başka sınıf içerisinde kullanacağımız diğer bir sınıf için defalarca CTOR ları farklı parametrelerle oluşturmaya gerek kalmayacak.Bu yeni yöntemle oluşturacağımız sınıf örneğinin istediğimiz özelliklerini, tanımlama esnasında süslü parantezler içerisinde yazarak  kullanacağız.Yeni yöntemleri bir örnekle açıklayarak devam edelim.

 

Kullanımı :

 

Bu örnekte bir Sehir sınıfı oluşturup bu şehir için belirli özellikler (property) belirtip daha sonra bu Sehir sınıfını başka bir sınıf içerisinde yeni ilklendirici metodlarla kullanacağız.

    public class Sehir

    {

        string _SehirAd;

        public string SehirAd

        {

            get { return _SehirAd;}

            set {_SehirAd = value;}

        }

 

        int _PlakaKod;

        public int PlakaKod

        {

            get { return _PlakaKod;}

            set { _PlakaKod = value;}

        }

    }

Bu sınıfın bir örneğini temel sınıfımızda oluşturmak için kullanacağımız yeni yöntem ise şöyle :

Sehir Istanbul = new Sehir {SehirAd = "İstanbul",PlakaKod = 34};

MessageBox.Show(Istanbul.SehirAd);

Örneği  alırken dikkat edilmesi gereken süslü parantezler kullanılarak sınıfın özelliklerinin bu parantezler içinde verilmesidir. Bu şekilde defalarca sınıf oluşturucu (Constructor) metodları aşırı yükleme yapmak zorunda kalmıyoruz.

Şimdi Sehir sınıfımıza birde Ulkesi özelliği ekleyelim.Bundan önce özelliğin işaret edeceği Ulke sınıfını oluşturalım   ve daha önceden oluşturduğumuz ilave metodlar özelliğini kullanarak ülkenin telefon alan kodunu bulup temel sınıfımızdan nesneyi tekrar çağıralım.

      

     public class Ulke

      {

        string _UlkeAd;

        public string UlkeAd

        {

          get {return _UlkeAd;}

          set {_UlkeAd = value;}

        }

 

        string _AlanKod;

        public string AlanKod

        {

            get { return _AlanKod;}

            set { _AlanKod = value;}

        }

      } 

 

 Yeni Sehir sınıfımıza eklenecek özelliğimiz :

 

 

        Ulke _Ulkesi = new Ulke(); //new kullanarak yeni ilklendirme metodunu kullanabileceğiz.

 

        public Ulke Ulkesi

        {

            get { return _Ulkesi;}

            set {_Ulkesi = value;}

        }

 

Yeni IlaveMetodlar sınıfımıza ek lenecek statik metodumuz :

        public static string UlkeAlanKodu(this Sehir SehirAd)

        {

            return SehirAd.Ulkesi.AlanKod;

        }

 

Şimdi temel sınıfımızdan şehrimizi oluşturup ülkesinin telefon alan kodunu alalım.

Sehir Istanbul = new Sehir {SehirAd = "İstanbul",PlakaKod = 34,Ulkesi = {UlkeAd = "Türkiye",AlanKod = "090"}};

MessageBox.Show(Istanbul.UlkeAlanKodu());

Görüldüğü gibi Ulkesi özelliğini oluştururken yine bu sınıfa ait özellikleri süslü parantez içerisinde yazdık.

Yeni Koleksiyon İlklendirme Metodu

Bu örnekte kullanmak için Sehir sınıfımıza Ilceler özelliğini ekleyeceğiz.

        string[] _Ilceler;

        public string[] Ilceler

        {

            get { return _Ilceler;}

            set { _Ilceler = value;}

        }

Daha sonrasında bu sınıfımızı temel sınıfta ilçeleriyle birlikte oluşturalım.

var Istanbul = new Sehir {Ilceler = {"Beşiktaş","Şişli","Beyoğlu","Bakırköy"}};

MessageBox.Show(Istanbul.Ilceler[0]);

String dizisi olan Ilceler özelliği ilklendirme esnasında oluşturulup kullanılmaktadır.

 

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

Belirsiz tipler anlık olarak gereksinim duyduğumuz tipte sınıflar oluşturmamıza yarar.Yukarıdaki örneklerde ülke ve şehir sınıflarını oluşturmuştuk.Bu örnekte ise Ilce1 adında yeni belirtilmemiş tipte bir değişken tanımlayarak bir ilçe yapısı oluşturacağız ve bu belirsiz tipteki sınıfın özelliklerine ulaşmaya çalışacağız.

     var Ilce1 = new { Ad = "Şişli",Nufus = 2000000};

     MessageBox.Show(Ilce1.Ad);

İlçemizin adını “Şişli” mesajıyla aldıktan sonra belirsiz tiplerde eşlemenin nasıl yapılacağına göz atalım.

var Ilce1 = new { Ad = "Şişli",Nufus = 2000000};

      var Ilce2 = new { Ad = "Beşiktaş", YuzOlcum = 10000};

      Ilce1 = Ilce2;

Bu şekilde bir eşlemeye gidildiğinde hata mesajı alınacaktır.Bunun sebebi 2 belirsiz tipin aynı özellikleri taşımamasıdır.İlk ilçe örneğinde Nufus ikincisinde ise YuzOlcum özelliklerinin ikisininde tipinin int olmasına rağmen aynı adı almamış olması hataya neden olur.İkinci yapıda Nufus özelliği YuzOlcum yerine kullanılırsa eşleme yapılabilir.

5        Belirtilmemiş Tipte Diziler (Implicitly Typed Arrays)

 

Belirtilmemiş tipte diziler aynı  “Beliritilmemiş Tipte Değişkenler” de olduğu gibi  kendisine atanan dizi kümesinin içindeki elemanların tiplerine göre ilklendirilir.Yazı dizisinin başından beri izlediğimiz örneği takiben bu defa ilçeler listesini dizi şeklinde tanımlayalım.Tahmin edildiği gibi ilçelerin hepsi string olarak diziye ekleneceğinden yeni oluşturulan dizimizin tipide string dizisi olacaktır.

 

Kullanımı :

var IlcelerDizisi = new[] {"Beşiktaş","Şişli","Beyoğlu","Bakırköy"};

 

new  kelimesinden sonra kullandığımız iki köşeli parantez bu belirtilmemiş tipte değişkenin bir dizi olacağını ve bu dizininde belirtilmemiş tipte olacağını gösterir.Bakıldığı zaman kullanım olarak yukarıda anlatılanlara benzer bir durum söz konusu.Diğer örneklere de göz atalım.

 

var AcilNumaralar = new[] { 110, 112, 155 };

 

var Istanbul = new Sehir();

var Izmir = new Sehir();

var Ankara = new Sehir();

var IllerDizisi = new[] { Istanbul, Izmir, Ankara, null };

 

 

 

Zorunluluklar :

 

                                I.            Dizi tanımlaması yapılırken null tipinde bir değişken diğer değişkenlerin tiplerinden ilklendirme yapılabiliyorsa kullanılabilir.

                             II.            Dizi içerisindeki tüm elemanlar bir diğerine çevrilebiliyorsa farklı tipte değişkenler kullanılabilir.