Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में IComparable और IComparer इंटरफेस का अंतर


दोनों इंटरफेस सॉर्टिंग और तुलना के लिए उपयोग होते हैं, लेकिन उनकी भूमिका अलग है।

IComparable<T> - आंतरिक तुलना

  • क्लास खुद को दूसरी क्लास के साथ तुलना करने योग्य बनाती है।
  • "मैं अपनी तुलना दूसरों से कर सकता हूँ।"
  • CompareTo(T other) लागू करना आवश्यक।
  • डिफ़ॉल्ट सॉर्टिंग व्यवहार परिभाषित करता है।
public class Vehicle : IComparable
{
    public string Make { get; set; }
    public int Year { get; set; }
    
    public int CompareTo(Vehicle other)
    {
        if (other == null) return 1;
        return this.Make.CompareTo(other.Make); // Make के अनुसार सॉर्ट
    }
}

// उपयोग
List vehicles = ...;
vehicles.Sort(); // IComparable उपयोग करता है

IComparer<T> - बाहरी तुलना

  • अलग क्लास जो दो ऑब्जेक्ट्स की तुलना करती है।
  • "मैं दूसरों की तुलना कर सकता हूँ।"
  • एकाधिक सॉर्टिंग रणनीतियाँ (आरोही/अवरोही, अलग फील्ड्स) सक्षम करती है।
  • Compare(T x, T y) लागू करना आवश्यक।
public class VehicleYearComparer : IComparer
{
    public int Compare(Vehicle x, Vehicle y)
    {
        if (x == null && y == null) return 0;
        if (x == null) return -1;
        if (y == null) return 1;
        return x.Year.CompareTo(y.Year);
    }
}

// उपयोग
vehicles.Sort(new VehicleYearComparer()); // Year के अनुसार सॉर्ट
vehicles.Sort(new VehicleYearComparer().Reverse()); // अवरोही

तुलना तालिका

विशेषताIComparable<T>IComparer<T>
कहाँ परिभाषितटाइप के अंदरअलग क्लास में
उद्देश्यडिफ़ॉल्ट सॉर्ट ऑर्डरकस्टम/वैकल्पिक सॉर्ट ऑर्डर
मेथडCompareTo(T)Compare(T, T)
उपयोगList.Sort()List.Sort(IComparer)
रणनीतियाँएकअसीमित

नोट

नॉन-जेनेरिक संस्करण (IComparable, IComparer) भी मौजूद हैं लेकिन जेनेरिक संस्करण टाइप-सेफ हैं और बॉक्सिंग से बचते हैं।

  1. - Java में Runnable और Callable इंटरफेस के बीच अंतर

    परिचयRunnable और Callable दोनों फंक्शनल इंटरफेस हैं। इन इंटरफेस को इम्प्लीमेंट करने वाली क्लासेस को दूसरे थ्रेड द्वारा निष्पादित करने के लिए डिज़ाइन किया गया है।थ्रेड को Runnable के साथ शुरू किया जा सकता है और नया थ्रेड शुरू करने के दो तरीके हैं: एक है Thread क्लास को सबक्लास करना और दूसरा है Runnab

  1. - Go और Java में अंतर

    GoGo एक प्रक्रियात्मक प्रोग्रामिंग भाषा है। प्रोग्राम पैकेज का उपयोग करके असेंबल किए जाते हैं। यह डायनामिक भाषाओं के समान पैटर्न को अपनाने वाले वातावरण का समर्थन करता है।JavaJava एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है। Java काफी तेज, विश्वसनीय और सुरक्षित है। यह सबसे व्यापक रूप से उपयोग की जाने व

  1. - एब्स्ट्रैक्ट क्लास और इंटरफेस में अंतर

    एक एब्स्ट्रैक्ट क्लास में इंस्टेंस मेथड्स हो सकते हैं जो डिफ़ॉल्ट व्यवहार लागू करते हैं। एक इंटरफेस केवल कॉन्स्टेंट्स और इंस्टेंस मेथड्स घोषित कर सकता है, लेकिन डिफ़ॉल्ट व्यवहार लागू नहीं कर सकता और सभी मेथड्स अंतर्निहित रूप से एब्स्ट्रैक्ट होते हैं। एक इंटरफेस के सभी मेंबर्स पब्लिक होते हैं और कोई