Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  .Net Framework'te karşılaştırıcı arayüzü. Bu arayüzü implement eden bir sınıf, kendisine gönderilen iki nesneden hangisi daha büyük, hangisi daha küçük anlamında karşılaştırma işlemi yapabiliyor demektir. Framework integer, string gibi temel tipleri nasıl karşılaştıracağını zaten bilir, ama bizim tanımladığımız tiplere ait örnekleri nasıl karşılaştıracağını bilemez. İşte bu yüzden kendi sınıflarımız için IComparer implementer'ları yazmak durumunda kalarız.

Halen okumadıysanız önce IComparable başlığını okuyunuz. Çünkü IComparer'ı anlatmak için oradaki örnekleri kullanacağım.

IComparable başlığındaki girişimde Ogrenci sınıfımıza ait örnekleri OkulNo alanına göre sıralamış, "peki ya Ad ve Soyad alanına göre de sıralamak istersek nasıl yapacağız?" diye sormuştuk. İşte bu gibi durumlarda, yani sıralama işlemini farklı şekillerde yapmamız gerektiğinde Comparer sınıfları oluşturup sıralamayı bu sınıfların yardımıyla yaptırmamız gerekir. Öğrencileri adına göre karşılaştıran sınıfımız OgrenciComparerByAd, soyadına göre karşılaştıran sınıfımız da OgrenciComparerBySoyad olsun. Bu sınıfları şöyle yazarız:

public class OgrenciComparerByAd : IComparer
{
    public int Compare(object x, object y) // bu metod IComparer implementasyonu için
    {
        Ogrenci ogr1 = (Ogrenci) x;
        Ogrenci ogr2 = (Ogrenci) y;
        return String.Compare(ogr1.Ad, ogr2.Ad);
    }
}

public class OgrenciComparerBySoyad : IComparer
{
    public int Compare(object x, object y) // bu metod IComparer implementasyonu için
    {
        Ogrenci ogr1 = (Ogrenci) x;
        Ogrenci ogr2 = (Ogrenci) y;
        return String.Compare(ogr1.Soyad, ogr2.Soyad);
    }
}

Artık öğrencileri 3 farklı şekilde sıralayabiliyoruz. Sıralama için gene Array.Sort() metodunu kullanacağız ama bu sefer Sort metoduna ikinci parametre olarak yukarıdaki Comparer'lardan birini geçireceğiz. Aşağıdaki gibi :

Ogrenci[] ogrenciler = falancaServis.GetOgrenciArray("1-A");

// IComparable ile okul nosuna göre sıralama.
Array.Sort(ogrenciler);
// çıktıya yazalım.
foreach(Ogrenci ogr in ogrenciler)
    Console.WriteLine(ogr.OkulNo + " " + ogr.Ad + " " + ogr.Soyad);

// OgrenciComparerByAd ile ada göre sıralama.
Array.Sort(ogrenciler, new OgrenciComparerBySoyad());
// çıktıya yazalım.
foreach(Ogrenci ogr in ogrenciler)
    Console.WriteLine(ogr.OkulNo + " " + ogr.Ad + " " + ogr.Soyad);

// OgrenciComparerBySoyad ile okul nosuna göre sıralama.
Array.Sort(ogrenciler, new OgrenciComparerBySoyad());
// çıktıya yazalım.
foreach(Ogrenci ogr in ogrenciler)
    Console.WriteLine(ogr.OkulNo + " " + ogr.Ad + " " + ogr.Soyad);

fizikci
21 Kasım 2005 13:52
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1093 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen