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 = "İ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.
MessageBox.Show(SehirAd.ToPlakaKod().ToString());
Görüldüğü gibi şehir adlarını kullanarak aynı şehirlerin plaka kodlarını ekranda gösterdik.
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