search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
368 gösterim
.NET de IComparable interface i nasıl kullanılır? Örnek ile açıklayabilir misiniz?
.Net kategorisinde 141 puan

1 cevap

0 oy

Selamlar,

Kısaca açıklaması; IComparable Interface’i, miras alan sınıfa CompareTo metodunu uygulatmakta ve bu metot aracılığıyla karşılaştırmayı sağlamaktadır.

List<int>() gibi önceden tanımlanmış bir veri tipine sahip bir koleksiyon kullandığımızda sıralamanın çok kolay olduğunu biliyoruz. Sıralamayı önemseyen Sort() yöntemi mevcuttur.

Ancak, kullanıcı tanımlı bir veri türüyle çalışırken veya bir nesneyi özelliğine göre sıralamak istediğimizde sıralama nasıl uygulanır?

Kullanıcı tanımlı nesnelerin bir koleksiyonu üzerinde Sort() yöntemini deneyelim.

using System;  
using System.Collections;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
   
namespace SelfHostingWebAPI  
{  
    public class Person  
    {  
        public Int16 ID { get; set; }  
        public string name { get; set; }  
        public string surname { get; set; }  
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            List<Person> per = new List<Person>()  
            {  
                new Person{ID=1,name="sourav",surname="kayal"},  
                new Person{ID=2,name="Ram",surname="kumar"}  
            };  
            per.Sort();  
            Console.ReadLine();  
        }  
    }  
} 

Ve işte yukarıdaki örneğin çıktısı.

Yani, çalışma zamanı iki nesneyi karşılaştıramayacağını söylüyor çünkü bu nesneler kullanıcı tanımlı ve sınıfta iki nesneyi karşılaştıracak bir mekanizma yok.

Bu sorunu çözmek için sınıfımızda bir IComparable arabirimi uygulayacağız ve CompareTo() yöntemini uygulayacağız.

Uygulamaya geçmeden önce IComparable arayüzünün ne olduğunu, metodunu ve özelliklerini görelim.

.NET sınıf kitaplığında IComparable arabiriminin konumu

Namespace: System
Assembly: mscorlib.dll

IComparable arabiriminin sözdizimi

Public interface IComparable
Başka bir deyişle, bu arayüze başka bir arayüz uygulamaz.

Yöntemler (Methods)

Aşağıdaki gibi yalnızca bir yöntem içerir:
CompareTo(): ​​Geçerli örneği aynı türdeki başka bir nesneyle karşılaştırır ve geçerli örneğin diğer nesneyle sıralama düzeninde aynı konumda olup olmadığını belirten bir tamsayı döndürür.

Şimdi IComparable arayüzünü kendi sınıfımızda uygulayalım. Aşağıdaki örneğe bir göz atabilirsiniz.

using System;  
using System.Collections;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
   
namespace SelfHostingWebAPI  
{  
    public class Person : IComparable<Person>  
    {  
        public Int16 ID { get; set; }  
        public string name { get; set; }  
        public string surname { get; set; }  
   
        public int CompareTo(Person other)  
        {  
            if (this.ID > other.ID)  
                return 1;  
            else if (this.ID < other.ID)  
                return -1;  
            else  
                return 0;  
        }  
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            List<Person> per = new List<Person>()  
            {  
                new Person{ID=3,name="sourav",surname="kayal"},  
                new Person{ID=1,name="Ram",surname="kumar"},  
                new Person{ID=2,name="Sudip",surname="Das"}  
            };  
            //Apply sort method in user defined object's collection  
            per.Sort();  
   
            foreach (Person p in per)  
            {  
                Console.WriteLine(p.ID + " " + p.name + "  " + p.surname);  
            }  
            Console.ReadLine();  
        }  
    }  
} 

Ve işte rulo numarasına bağlı olarak sıralı listem.

Yukarıdaki örnekte, karşılaştırmaya bağlı olarak 0,1 ve -1 değerlerini döndürüyorduk. Herhangi bir değer döndürmezsek, nesnelerin iki özelliğinden farklı bir değer döndürür. Bu örneğe bir göz atın. Burada iki nesnenin maaş özelliğini karşılaştırıyoruz.

using System;  
using System.Collections;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
   
namespace SelfHostingWebAPI  
{  
    public class Person : IComparable  
    {  
        public string name { get; set; }  
        public Int16 SalaryAmount { get; set; }  
   
        public int CompareTo(object obj)  
        {  
            if (obj == this)  
                return 1;  
            else  
                return this.SalaryAmount.CompareTo(this.SalaryAmount);  
        }  
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Person p1 = new Person();  
            p1.name = "Sourav";  
            p1.SalaryAmount = 1500;  
   
            Person p2 = new Person();  
            p2.name = "Ram";  
            p2.SalaryAmount = 1000;  
            Console.WriteLine("Diffrence between salary of p1 and p2");  
            Console.WriteLine(p1.SalaryAmount.CompareTo(p2.SalaryAmount));  
            Console.ReadLine();  
        }  
    }  
} 

Ve p1 ve p2'nin maaş farkı 500'dür.

Umarım açıklayıcı ve bilgilendirici olmuştur.

Teşekkürler


 

 

139 puan

İlgili sorular

0 oy
2 cevap 1.8K gösterim
1.8K gösterim
.NET ile C# kavramları nedir? Arasındaki fark nedir?
6 Ekim 2016 .Net kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 256 gösterim
256 gösterim
C# kullanarak bir uygulama geliştiriyorum. Elimdeki string in içinden istediğim karakteri nasıl alırım? Mesela birinci ikinci..
2 Kasım 2016 .Net kategorisinde kupanintorunu 365 puan sordu
0 oy
1 cevap 768 gösterim
768 gösterim
ADO. NET Entity Data Model projede gözükmüyor? Projeye Stored Procedure ekleyeceğim. İnternetten araştırdığım kadarıyla Model'e "Ado.Net Entity Data Model" ekleyerek oluştıuruluyor. Model'e Yeni öğe eklemeye çalıştığımda; JSON File JSON Schema File XML File YAML File ... eklerim? Düzeltme: .Net Core ile çalıştığım için gözükmüyormuş. .Net Core projesine Ado.Net Entity Data Model nasıl eklerim?
1 Temmuz 2021 .Net kategorisinde canonka 334 puan sordu
0 oy
1 cevap 296 gösterim
296 gösterim
Textboxtan girilen veriyi entera basınca checklistboxa/listboxa atamak istiyorum. Ne yapmalıyım?
15 Mart 2017 Algoritma kategorisinde canonka 334 puan sordu
0 oy
1 cevap 956 gösterim
956 gösterim
checklistboxtan seçtiklerimizi butona basınca listboxa atamasını istiyorum.Sorun şu ki checklistboxtan seçtiklerimin her seferinde sadece yarısını atıyor. 10 veri seçsem 5 tanesini 2 veri seçsem 1 tanesini atıyor. Sorunu bir türlü çözemedim. Butona atadığım kod şu ... i++) { listBox1.Items.Add(checkedListBox1.CheckedItems[i]); checkedListBox1.Items.Remove(checkedListBox1.CheckedItems[i]); }
14 Mart 2017 C/C++ kategorisinde canonka 334 puan sordu