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 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.
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.