12 Haziran 2010 Cumartesi

Virtual (Sanal) Class'lar

Kisaca virtual classlar, c#'da isaret edilen nesneye ulasmamiz gerektiginde kullanmamiz gereken classlardir.

Silindir s;
Daire alan=s;
dersek daire sinifinin uyelerine erisir.ama biz belki de silindirin alanina erismek istiyorduk. Bu yuzden, eger AlanHesapla metodumuz, silindir ve daire icin ortaksa bizim ayri ayri metot tanimlamamiza gerek kalmaz. Zaten silindir daireden turemisti ve orada yaricap, merkez gibi bilgileri almisti. Bunlari ayni metot ismi uzerinden kullanip, yani override islemi yapabiliriz.Yani;

Public virtual double AlanHesapla();
dersek dairenin AlanHesapla isimli metoduna,

Public override double AlanHesapla();
dersek de ustteki koddan silindirin AlanHesapla isimli metoduna erisiriz.

Buradan da anlasilacagi uzere, turetilen siniflarda ayni gorevi yapan metotlarin sadece govdesini degistirerek ayni isimde gorev verebiliriz. Bunun icin yapmamiz gereken tek sey override sozcugunu eklemek.

4 Haziran 2010 Cuma

Parse ile Convert.ToInt Arasindaki Fark Nedir?

Kisaca cevaplarsak;

Parse metodu, girilen degerin null olup olmadigina bakmadan direk calisiyor. Dolayisiyla null olmasi durumunda hata verdiriyor. Buna karsilik;

Convert.ToInt metodu, girilen degerin null olup olmadigini kontrol edip, nullsa degerin null oldugunu yazdiriyor, degilse de daha sonra parse metodunu cagirarak gereken islemi yaptiriyor.


Koleksiyon Kavramlari(ArrayList)

C# da ve daha dogrusu butum programlama dillerinde bilgileri elde tutmanin en kolay yolu dizilerdir. Fakat bazi durumdlarda diziler de yetersiz kalabilmektedir. Nedir bu durumlar? Bir listeye ortadan deger girmek veya 4 elemanli bir diziye eleman ekleyememek ... vs. gibi sorunlar. Bu durumda yardimimiza koleksiyon kavrami kosuyor. Simdi kisaca ornek uzerinden de anlatalim.

Arraylist dedigimiz kavrami boyutsuz dizi gibi de tanimlayabiliriz. Aslinda boyutu var, ilk acilista otomatik olarak 4 byte olarak acilip, listemiz dolduktan sonra eklenen eleman icin 2 kati uzunlugunda yer daha aciyor kendisine. Bunu 4 byte olarak secmesinin nedeni de sonucta dizinin boyutunu artirmak da bilgisayar icin zahmetli bir yol oldugundan surekli 1 byte 1 byte veri ekleyecegine, tek seferde 4 acip daha sonra 2 ser kati artarak daha az yakit kullanarak daha cok yol almis oluyor.

Konudan uzaklasmadan, arraylist'leri dizi mantiginda dusunursek, tanimlamamiz yine ayni sekilde olacak, bellege yeni adresini acmis olacagiz.

ArrayList liste = new ArrayList();


NOT: koleksiyon kavramini kullanabilmemiz icin mutlaka namespace'sine su tanimlamayi yazmamiz gerekir.

using System.Collections;

Artik namespace'miz de hazirsa yeni dizimize(koleksiyon) deger girisi yapalim.

liste.Add("Istanbul");
liste.Add("Ankara");
liste.Add("Izmir");

//Indexer kullanımıyla atama
liste[1] = "Trabzon";
//ve okuma
Console.WriteLine(liste[1]);

Son olarak da sunu unutmayalim ki, listeye deger girisi yaparken veya deger okuturken arraylist'in bizden object bir deger istedigini gorecegiz. Bizim programa hangi tipin(int,string,double,char...vs) gelecegini ozellikle belirtmemiz gerekir ki orda da casting islemleri devreye giriyor.