है मेरे पास एक डोमेन मॉडल है जिसका निम्नलिखित रूप से प्रतिनिधित्व किया जाता है।IEquatable <T> कार्यान्वित करना जहां टी एक इंटरफेस
IMyInterface
ClassA : IMyInterface
ClassB : IMyInterface
मैं चाहता हूं कि Iquatable को इस तरह से कार्यान्वित करना है कि मैं कुछ कोड लिख सकता हूं।
if(dynamicallyCreatedInstanceOfClassA == dynamicallyCreatedinstanceOfClassB)
{
// Do something relevant
}
मेरी पहली झुकाव IMyInterface IEquatable लागू लेकिन निश्चित रूप से मैं वास्तव में IMyInterface में लागू करने नहीं कर सकता है करने के लिए किया गया था। मुझे कक्षा और कक्षाबी में ऐसा करना होगा। इस समाधान के साथ मुझे गलत क्या लगता है कि क्लास और क्लासबी में आईक्वाटेबल के कार्यान्वयन बिल्कुल लाइन के लिए लाइन होंगे। क्या इसे पूरा करने का कोई शानदार तरीका है? जब कक्षासी के साथ आता है तो मैं प्रतिलिपि IEquatable कोड की 50 लाइनों की प्रतिलिपि बनाना और पिछले नहीं करना चाहता हूं।
मैंने इंटरफ़ेस की बजाय एक सार आधार वर्ग का उपयोग करने पर विचार किया है, लेकिन इस परिदृश्य में IMyInterface वास्तव में कक्षाओं का प्रदर्शन करने वाले वर्गों का वर्णन करता है और कक्षा नहीं है। कक्षा और कक्षा बी कई समानताओं को साझा नहीं करते हैं, सिवाय इसके कि वे दोनों IMyInterface अनुबंध में कार्रवाइयां कर सकते हैं।
कोई अंतर्दृष्टि सहायक है, और आपके समय के लिए धन्यवाद।
मैंने सार तत्व भी जाने का सुझाव दिया होगा, लेकिन नुकसान यह है कि इससे आपकी व्युत्पन्न कक्षाओं को एक और ठोस वर्ग से विरासत में सीमित कर दिया जाएगा क्योंकि एमआई को सी # में अनुमति नहीं है।'GetHashCode' से संबंधित संभावित समस्या को देखने के लिए सुपरकैट का उत्तर देखें। जॉन का दृष्टिकोण यह लगता है कि यह एकमात्र आसान तरीका है .. – nawfal
@nawfal: जॉन का दृष्टिकोण सही है, क्योंकि यह पूरी तरह से सामान्य है और 'IEqualityComparer 'के लिए अपेक्षाकृत समानता के विस्तृत रूपों का प्रतिनिधित्व करने के लिए अपेक्षित है, जिसे' टी 'कुछ भी नहीं पता के बारे में। उदाहरण के लिए, 'ऑलिस्ट ' को लागू करने के लिए होने वाली दो ऑब्जेक्ट्स शायद ही खुद को एक-दूसरे के बराबर रिपोर्ट करनी चाहिए यदि वे हमेशा एक ही क्रम में एक ही आइटम रखेंगे। यह उपयोगी हो सकता है, हालांकि, किसी ऑब्जेक्ट को सूचियों को स्टोर करने में सक्षम होने के लिए यह 'डिक्शनरी , जहां भी>' है, जहां किसी भी अनुक्रम में एक ही आइटम वाले सूचियां समान की तुलना करेंगी। –
supercat
@nawfal: ऐसी कोई तुलना विधि 'IList' में मौजूद नहीं है; कार्यान्वयन आमतौर पर एक प्रदान नहीं करते हैं। फिर भी, इस तरह की एक तुलना विधि कुछ संदर्भों में उपयोगी हो सकती है, इसलिए इस तरह के फैशन में 'ICEqualityComparer >' लागू करने के लिए बाहरी कक्षा का उपयोग करना उचित होगा। –
supercat