26 Temmuz 2010 Pazartesi

C# 3.0 Yenilikleri - II

1-Object Initializer:
Nesne orneklemesi yapilirken, eger kullanilan class'in constructori asiri yuklenmisse, bizden asiri yuklenen parametrelerin girisi zorlandirilir ide tarafindan. Yani ornegin Urun classimizin constructori su sekilde ise,

public Urun(int id,string ad,double fiyat)

ise biz bu sinifin orneklenmesini yaparken;

Urun urn=new Urun(1,Monitor,100);

yapmamiz gerekecekti. Bu basit bir ornekti. Diyelim ki projemiz daha uzun ve komplike fieldlara sahip olsun, o zaman surekli constructorlari overload mi edecektik. Onlarca constructor mi yazmamiz gerekecekti. Cevap ne yazikki evet. Iste C# 3.0 yeniligi ile birlikte artik bu cevap hayir olacak :) Hemen ornekte gosterelim;

Urun u = new Urun() { Id = 1, Ad = "Monitor", Fiyat = 200 };

Bizim arka planda ayrica 3 parametreli constructor yazmamiza gerek kalmayacak boylece. Ne kadar guzel bir ozellik degil mi?

Not: Bu ozellik bize ctor'u kullanma demek olmuyor. Ctor'larin isimize gercekten buyuk olcude yarayan cok onemli gorevleri vardir, bu gorevlerden yararlanmak istedigimiz zaman kullanabiliriz. Peki nedir bu gorevler;
a)Kullaniciyi deger girmeye zorlamak
b)Nesne orneklenirken bir takim kodlari calistirabilmek.
2-Extension Methods: Extension metod bir nesne uzerinde is yapan static bir metodu, sanki o nesnenin nonstatic bir metoduymus gibi cagirma imkani saglar.

public static void BenHerYerdeCikarim(this object obj)
{
//toString() gibi tum object nesnelerde gorulebilecek.
}
public static void Test(this IComparable obj)
{ }

* this anahtar sozcugu sayesinde o tipe ait nesnelerin bir uyesi gibi artik intellisensede bize gorunecektir. Yani biz object a; veya IComparable a; diye tanimlama yaptiktan sonra a. dersek intellisensde BenHerYerdeCikarim veya Test metotlarini gormus olacagiz. BenHerYerdeCikarim metodu object siniflara eklendiginden ToStrign() metodu gibi tum nesnelerde cikabilecek.

Butun bu uyeler (object,IComparable ... vs.) turetmeye uygun class olduklarindan biz bunlari turetip, bu classlara kendi metotlarimiz ekleyebiliyorduk. Peki bizim classimiz kalitim dusmani olan sealed olsaydi. Hemen en basit ornegi

Public sealed class String;

Stringleri kalitamadigimizdan o sinifa metot da ekleyemiyoruz. Peki bu durumda ne yapacagiz. C# 2.0 ile gelen bir ozelligi kullanip, classlara da static anahtar sozcugunu ekleyerek artik istedigimiz islemi yapmis olacagiz.

public static string RemoveNonNumeric(this string str) //this ile o sinifin uyeyisinin ozelligiymis gibi yenilik getirdik.sonuc. diyince cikiyo artik...
{
string res = string.Empty;
foreach (char c in str)
{
if (char.IsNumber(c))
{
res += c;
}
}
return res;
}



3-Collection Initializer: Kullanisli bir C# 3.0 yeniligi daha. Anlatmaya pek gerek kalmayacak, ornegini gosterdigim zaman anlasilacaktir.

List sayilar = new List() { 5, 10 };
ile simdi yazacagim kod arasinda hic bir fark yoktur.

sayilar.Add(5);
sayilar.Add(10);

0 yorum: