IComparable
arayüzü, bir sınıfın nesnelerinin sıralanabilmesi için karşılaştırma mantığını tanımlamasına olanak tanır. Bu arayüz, sıralama algoritmalarında kullanılmak üzere nesneleri karşılaştırmak için gereklidir.
Aşağıda, IComparable
arayüzünün nasıl uygulanabileceğini gösteren bir örnek bulunuyor:
IComparable Implementasyonu
Örneğin, bir Student
sınıfınız olduğunu varsayalım. Bu sınıftaki öğrencileri Age
(yaş) özelliğine göre sıralamak isteyebilirsiniz. Bu durumda IComparable
arayüzünü şu şekilde uygulayabilirsiniz:
namespace IcomparableImplementasyonu
{
public class Student : IComparable<Student>
{
public string Name { get; set; }
public int Age { get; set; }
// IComparable arayüzünün CompareTo metodunu uyguluyoruz.
public int CompareTo(Student other)
{
#region Yontem1
// Yöntem 1: CompareTo metodu kullanarak karşılaştırma
// 'other' nesnesi null ise, bu nesnenin (this) daha büyük olduğunu belirten 1 değeri döndürülür.
// Eğer 'other' null değilse, this.Age ve other.Age karşılaştırılır.
// this.Age < other.Age ise negatif bir değer döner.
// this.Age > other.Age ise pozitif bir değer döner.
// Eğer yaşlar eşitse 0 döner, bu da iki nesnenin eşit olduğunu belirtir.
if (other == null) return 1;
return this.Age.CompareTo(other.Age);
#endregion
#region Yontem2
// Yöntem 2: Manuel karşılaştırma
// 'this.Age' ile 'other.Age' karşılaştırılır.
// Eğer this.Age < other.Age ise, -1 döndürülür. Bu, bu nesnenin (this) diğer nesneden (other) daha küçük olduğunu belirtir.
// Eğer this.Age > other.Age ise, 1 döndürülür. Bu, bu nesnenin (this) diğer nesneden (other) daha büyük olduğunu belirtir.
// Eğer yaşlar eşitse 0 döner, bu da iki nesnenin eşit olduğunu belirtir.
if (this.Age < other.Age)
return -1;
if (this.Age > other.Age)
return 1;
return 0;
#endregion
}
public override string ToString()
{
return $"Name: {Name}, Age: {Age}";
}
}
internal class Program
{
static void Main(string[] args)
{
// Öğrenciler listesi oluşturuyoruz.
Student[] students = {
new Student { Name = "Ahmet", Age = 21 },
new Student { Name = "Zeynep", Age = 19 },
new Student { Name = "Murat", Age = 23 },
new Student { Name = "Murat", Age = 21 },
};
// Öğrencileri yaşa göre sıralıyoruz.
Array.Sort(students);
// Sıralanmış listeyi ekrana yazdırıyoruz.
foreach (var student in students)
{
Console.WriteLine(student);
}
}
}
}
Açıklamalar:
IComparable Interface: IComparable<T>
arayüzü, CompareTo
metodunu içerir. Bu metod, bir nesneyi başka bir nesneyle karşılaştırır.
CompareTo Metodu: CompareTo
metodunda, mevcut nesne (this
) ile diğer nesne (other
) karşılaştırılır.
- Yöntem 1:
CompareTo
metodu, karşılaştırmayı gerçekleştirmek içinint
veri türüne özgü yerleşikCompareTo
metodunu kullanır. Bu yöntem daha kısadır ve dilin sunduğu yerleşik karşılaştırma işlevinden faydalanır.- Eğer
other
nesnesinull
ise, bu nesnenin (this
) daha büyük olduğunu belirlemek için1
döndürülür.
- Yöntem 2:
- Bu yöntemde, karşılaştırma işlemi manuel olarak gerçekleştirilir. Önce iki
Age
değeri arasında bir karşılaştırma yapılır. - Eğer
this.Age
değeriother.Age
‘den küçükse,-1
döndürülür; büyükse1
döndürülür. Eşitse0
döndürülür.
- Bu yöntemde, karşılaştırma işlemi manuel olarak gerçekleştirilir. Önce iki
Sort: Array.Sort(students)
ifadesi, Student
nesnelerini yaşa göre sıralar.
Her iki yöntem de işlevsel olarak aynı sonucu verir, ancak Yöntem 1 daha kısa ve CompareTo
metodunu kullanarak daha yaygın bir yaklaşımla karşılaştırmayı gerçekleştirir.
Bu şekilde IComparable
arayüzü uygulanarak Student
nesneleri yaşlarına göre kolayca sıralanabilir.