Makale Özeti

Bu makalemizde sizlere c# dilinin 4. Versiyonunda .net Framework 4.0 ve visual studio 2010 ile beraber gelecek olan özellik ve yeniliklerden bahsediyor olacağız.

Makale

C# 4.0


Herkese merhabalar;
Bu makalemizde sizlere c# dilinin 4. Versiyonunda .net Framework 4.0 ve visual studio 2010 ile beraber gelecek olan özellik ve yeniliklerden bahsediyor olacağız.
İsterseniz makalemize dilin gelişimini kısaca inceleyererk başlayalım. C# 1.0’da temel tema ve geliştirilen yönetilen kod idi. Daha sonra C# 2.0 ile birlikte generic yapı dile eklenildi. Son olarak ise C# 3.0 ile birlikte dile entegre sorgulama olarak türkçeye çevirebileceğimiz Language Integrated Query (LINQ) C#’a entegre edildi. Bu makalemizin konusu olan C# 4.0’da ise temel tema dinamik programlama olucak.


C# 4.0 esas olarak 4 ana başlıkta incelenebilir.


1- Dinamik tipli Nesneler (Dynamic Typed Objects)
2- Opsiyonel ve isimlendirilmiş parametreler
3- Gelişmiş COM birlikteliği
4- Co- ve Contra-Farklılığı


Bu makalemizde Dinamik tipli nesneler ve opsiyonel ve isimlendirilmiş parametreler ile neler yapabiliriz bunlara değineceğiz. Konu ile ilgili ayrıca MSDN üzerinde kaynak bulabilirsiniz. Bu makalemizde geliştireceğimiz örneklerimizi .net framework 4.0’ın takım arkadaşı olan ve henüz beta1 aşamasında bulunan visual studio 2010 üzerinde gerçekleştiriyor olacağız.


Dinamik Programlama


C# 4.0 ile birlikte dile yeni eklenecek özelliklerden biri olan dinamik tipli nesneler sayesinde dinamik programlamaya tam destek veriliyor. Dinamik tipli nesnelerini kısaca tanımlamak gerekirse nesne tiplerinin compile time dediğimiz derleme zamanı yerine run-time dediğimiz çalışma zamanında belirlenmesidir. C# 3.0 ile birlikte dönüş tipini tahmin edemediğimiz sonuçları saklamak için var anahtar kelimesini kullanıyorduk. Dinamik tipli nesneleri tanımlamak için ise imdadımıza dynamic anahtar kelimesi yetişiyor. Bu anahtar kelime derleyiciye tanımlanan nesnenin tipinin derleme zamanında değilde dynamic language runtime (DLR) olarak isimlendirdiğimiz yapı sayesinde çalışma zamanında belirleneceğini bildiriyor. Şunu bir kez daha hatırlatmakta fayda görüyorum; dynamic anahtar kelimesi var anahtar kelimesinden farklıdır. Dilerseniz vakit kaybetmeden bu özelliği bir örnekle pekiştirerek daha iyi anlamaya çalışalım.
Visual Studio 2010’da bir konsol uygulaması oluşturduktan sonra;


dynamic x;


şeklinde ilk dinamik değişkenimizi tanımladık. Hemen burada değişkenin ilgili metod ve özelliklerine ulaşmak istediğimizde bu durumda intelli-sense desteğinin sağlanmadığını göreceğiz.

intellisense

Dilerseniz değişkenimize ilk değerini atayarak örneğimize devam edelim.


dynamic x;
x = 10;
Console.WriteLine(x.ToString());
Console.ReadLine();


Yukarıdaki kod parçacığı ile x adlı dinamik değişkenimize 10 değerini atayıp ki bu değer atamadan hemen sonra x artık int tipinde bir değişken oluyor. İnt sınıfının ToString() metodunu çağırarak ilgili değişkeni string tipine çevirip ekrana yazdırıyoruz. Burada dikkat edilmesi gereken nokta ToString metodunu yazarken derleyici tarafından bize intelli-sense sağlanmaması ve eğer metodu herhangi bir şekilde yanlış yazarsak çalışma zamanlı bir hata alacağımızdır.

Aşağıda gördüğünüz gibi ToString metodunu Tostring gibi yazsak dahi çalışma zamanlı istisna (exception) alıyoruz.

Exception


Gördüğünüz gibi oldukça esnek bir özellik, bu özellik sayesinde biz developer’ların işleri bir ölçü daha kolaylaşıyor.


Opsiyonel ve isimlendirilmiş Parametreler


C# 4.0 ile birlikte gelen bir diğer özelliğimiz ise sınıfların yapıcı metodlarındaki parametrelere isim verebilme ve bazı parametreleri opsiyenel bırakabilme imkanı sağlayan Opsiyonel ve İsimlendirilmiş parametreler özelliği. Dilerseniz vakit kaybetmeden örneğimize geçerek bu yeni özelliğin bizlere neler getirdiğini yakından görelim.
Visual Studio 2010’da açtığımız yeni console uygulamamıza Çalışan adlı bir sınıf ekliyoruz. Sınıfımızı varsayılan yapıcı metodunu C# 3.0 ile bir kaç kez aşırı yükleyerek aşağıdaki şekilde tanımlarken,

public class Calisan
{
public string İsim { get; set; }
public string Soyisim { get; set; }
public string Departman { get; set; }
public string DogumYeri { get; set; }

public Calisan(string isim, string soyisim)
{
İsim= isim;
Soyisim= soyisim;
Departman= "Bilgisayar";
DogumYeri= string.Empty;
}
public Calisan(string isim, string soyisim, string departman)
{
İsim= isim;
Soyisim= soyisim;
Departman= departman;
DogumYeri= string.Empty;

}
public Calisan(string isim, string soyisim, string departman,
string dogumYeri)
{
İsim= isim;
Soyisim= soyisim;
Departman= departman;
DogumYeri = dogumYeri;
}
}

Opsiyonel ve isimlendirilmiş parametreler ile bir kaç satırda aşağıdaki gibi tanımlayabiriz.


public Calisan(string isim, string soyisim, string departman = "N/A", string dogumyeri = "")
{
İsim = isim;
Soyisim = soyisim;
Departman = departman;
DogumYeri = dogumyeri;
}


Yapıcı metod’umuzu bu şekilde tanımladıktan sonra eğer bu sınıftan bir nesne türetmek istersek intelli-sense’de alıştığımız tooltip’ten farklı olarak aşağıdaki gibi bir yapı ile karşılaşıcaz.

Tooltip

 Bu Tooltip’ten anlamamız gereken Departman field’ımızın varsayılan olarak Bilgisayar değerine ayrıca dogumyeri field’ımızın varsayılan olaran boş bir değere sahip olduğu eğer yapıcı metod’da buna bir değer vermez isek varsayılan olarak bu değeri alacağıdır.
Ayrıca Nesnemizi örneklerken aşağıdaki şekilde örneklemeler yapabiliriz. Bu örneklerimizi yapmadan önce Calisan sınıfımızın ToStiring metodunu aşağıdaki gibi override ederek (ezerek) istediğimiz çıktıları daha kolay gözlemlememizi sağlıyoruz.


public override string ToString()
{
string str;
str = this.İsim + " " + this.Soyisim + " " + this.Departman + " " + this.DogumYeri;
return str;
}


Artık ilgili sınıfımızdan nesnelerimizi türetmeye başlıyoruz.


Calisan c = new Calisan("Fatih", "Coşkun");
Console.WriteLine(c.ToString());
c = new Calisan("Ali", "Rıza", departman: "Yazılım", dogumyeri:"istanbul");
Console.WriteLine(c.ToString());
c = new Calisan("Veli", "Demir", dogumyeri: "Ş.Karahisar");
Console.WriteLine(c.ToString());
Console.ReadLine();

Gördüğümüz gibi sınıfımızın yapıcı metodunda isimledirilmiş ve opsiyonel parametreleri kullanarak ve sadece tek bir yapıcı metod yazarak çok farklı şekilde örneklemeler yapabiliyoruz. Ayrıca tüm bu örneklemeleri yaparken Visual Studio 2010 bize intelli-sense ile yardımcı oluyor.

Opsiyonel Parametreler


Kodumuzu hatasız şekilde derleyip çalıştırdıktan sonra aşağıdaki çıktımızı alıyoruz.

Çıktımız

Evet değerli okurlarım bir makalenin daha sonuna geldik, yeni bir makalede tekrar görüşmek dileğiyle Hoşçakalın..