विरासत प्रकार आमतौर पर IEquatable<T>
लागू नहीं करना चाहिए। यदि IEquatable<T>
में GetHashCode()
विधि शामिल है, तो कोई यह कहने के लिए IEquatable<T>
के अर्थशास्त्र को परिभाषित कर सकता है कि टी के रूप में जांच किए जाने पर आइटमों की तुलना बराबर की जानी चाहिए। दुर्भाग्यवश, तथ्य यह है कि IEquatable<T>
एक ही हैश कोड के लिए बाध्य है Object.Equals
का अर्थ है कि सामान्य रूप से IEquatable<T>
को अनिवार्य रूप से उसी semantics को Object.Equals
के रूप में लागू करना होगा।
नतीजतन, IEquatable<BaseClass>
के एक कार्यान्वयन के भीतर कॉल Object.Equals
के अलावा और कुछ है, तो एक व्युत्पन्न वर्ग जो Object.Equals
ओवरराइड करता है और GetHashCode()
और नहीं करता है फिर से लागू IEquatable<BaseClass>
कि इंटरफेस की एक टूटी हुई कार्यान्वयन के साथ खत्म हो जाएगा; IEquatable<BaseClass>
का कार्यान्वयन जो बस Object.Equals
पर कॉल करता है, उस परिदृश्य में भी ठीक काम करेगा, लेकिन उस वर्ग पर कोई वास्तविक लाभ नहीं देगा जो IEquatable<T>
लागू नहीं करता है।
यह देखते हुए कि विरासत योग्य वर्गों को पहले स्थान पर IEquatable<T>
लागू नहीं किया जाना चाहिए, कॉन्वर्सिस की धारणा इंटरफ़ेस के उचित कार्यान्वयन के लिए प्रासंगिक नहीं है।
समस्याओं में धागा [चाहिए 'IEquatable', 'IComparable ' गैर 'sealed' वर्गों पर लागू किया जा?] (Http://stackoverflow.com/questions/1868316/should-iequatablet-icomparablet- उल्लेख किया गैर-मुहरबंद-कक्षाओं पर लागू हो) यदि 'IEquatable <>' contravariant था तो बस बहुत खराब हो जाएगा। –