तरीकों भी के लिए एक ही:मैं दो संपत्ति इन्फोस या विधियों की तुलना कैसे कर सकता हूं?
मैं PropertyInfo या तरीकों में से दो स्थितियों वर्ग में उपयोग होने वाली से निकाला गया है GetProperty()
या GetMember()
के माध्यम से दिया जाता रहा आदि, (या एक MemberExpression शायद से)।
मैं निर्धारित करने के लिए अगर वे तथ्य यह है एक ही संपत्ति या एक ही विधि का जिक्र कर रहे हैं तो
(propertyOne == propertyTwo)
या
(methodOne == methodTwo)
जाहिर है कि नहीं जा रहा है चाहता हूँ वास्तव में काम करते हैं, आप हो सकता है के लिए एक ही संपत्ति को देख रहे हैं, लेकिन इसे कक्षा पदानुक्रम के विभिन्न स्तरों से निकाला जा सकता है (जिसमें आमतौर पर propertyOne != propertyTwo
)
cours के ई, मैं DeclaringType को देखो सकता है, और फिर से अनुरोध संपत्ति, लेकिन यह एक बिट भ्रमित हो रही शुरू होता है जब तुम सोच के बारे में
- गुण/तरीके इंटरफेस पर घोषित कर दिया और वर्गों पर लागू
- गुण/तरीके घोषित शुरू एक आधार वर्ग (लगभग) और व्युत्पन्न वर्ग पर ओवरराइड पर
- गुण/तरीके, एक आधार वर्ग पर घोषित 'नए' के साथ अधिरोहित
(आईएल दुनिया में इस कुछ भी नहीं विशेष iirc है) के अंत में दिन, मैं बस एक बुद्धिमान ईक करने में सक्षम होना चाहता हूँ दो गुणों या दो तरीकों के बीच uality जांच, मैं 80% सुनिश्चित हूं कि उपर्युक्त बुलेट बिंदु सभी किनारे के मामलों को कवर नहीं करते हैं, और जब मैं बस बैठ सकता हूं, परीक्षणों का एक समूह लिख सकता हूं और खेलना शुरू कर सकता हूं, मैं अच्छी तरह से जानता हूं कि इन अवधारणाओं को वास्तव में कार्यान्वित करने के बारे में मेरा निम्न स्तर का ज्ञान उत्कृष्ट नहीं है, और मुझे उम्मीद है कि यह पहले से ही उत्तर दिया गया विषय है और मैं बस खोज में चूसता हूं।
सर्वश्रेष्ठ उत्तर मुझे तरीकों कि इसके बाद के संस्करण प्राप्त की एक जोड़ी देना होगा समझा क्या बढ़त मामलों का ध्यान रखा गया है और यही कारण है कि :-)
स्पष्टीकरण:
वस्तुतः मुझे यकीन है कि वे एक ही संपत्ति कर रहे हैं, यहाँ कुछ उदाहरण हैं बनाना चाहते
public interface IFoo
{
string Bar { get; set; }
}
public class Foo : IFoo
{
string Bar { get; set; }
}
typeof(IFoo).GetProperty("Bar")
और
typeof(Foo).GetProperty("Bar")
दो संपत्ति infos, जो बराबर नहीं हैं वापसी करेंगे:
public class BaseClass
{
public string SomeProperty { get; set ; }
}
public class DerivedClass : BaseClass { }
typeof(BaseClass).GetMethod("SomeProperty")
और
typeof(DerivedClass).GetProperty("SomeProperty")
मैं वास्तव में याद नहीं कर सकते हैं कि ये दोनों वापसी बराबर अब वस्तुओं, लेकिन मेरी दुनिया में वे बराबर हैं।
इसी तरह:
public class BaseClass
{
public virtual SomeMethod() { }
}
public class DerivedClass
{
public override SomeMethod() { }
}
typeof(BaseClass).GetMethod("SomeMethod")
और
typeof(DerivedClass).GetProperty("SomeMethod")
फिर, ये मैच नहीं होगा - लेकिन मैं उन्हें चाहते हैं (मैं जानता हूँ कि वे विशेष रूप से बराबर नहीं कर रहे हैं, लेकिन मेरे डोमेन वे कर रहे हैं क्योंकि वे एक ही मूल संपत्ति का संदर्भ देते हैं)
मैं इसे संरचनात्मक रूप से कर सकता हूं, लेकिन यह 'गलत' होगा।
इसके अलावा नोट्स:
कैसे तुम भी संपत्ति है कि एक और संपत्ति छुपा के अनुरोध करते हैं? लगता है कि मेरे पहले के अनुमानों में से एक अमान्य था, कि GetProperty("name")
का डिफ़ॉल्ट कार्यान्वयन वर्तमान स्तर को डिफ़ॉल्ट रूप से संदर्भित करेगा।
BindingFlags.DeclaringType
बस वापस लौटने के लिए प्रकट होता है!
"बेस क्लास पर घोषित गुण/तरीके, 'नया' के साथ ओवरराइड किया गया -" इसे वास्तव में * छुपा * कहा जाता है, और वे * निश्चित रूप से * अलग-अलग सदस्य हैं। उन्हें बिल्कुल "बराबर" के रूप में देखने का अर्थ नहीं है। – Ani
ठीक है, मैंने बस बुरी तरह से वाक्यांश दिया - उस परिस्थिति में सच होने के लिए तुलना कोड लिखना बहुत कठिन होगा ;-) - यह अभी भी एक दुखी पथ है जिसे परीक्षण की आवश्यकता है, क्योंकि मैं संरचनात्मक तुलना कोड के बारे में सोच सकता हूं जो सच हो जाएगा । –
क्या आप इस प्रश्न को बेहतर तरीके से स्पष्ट कर सकते हैं? क्या आप 'string.GetHashCode == int.GetHashCode' चाहते हैं (क्योंकि उनकी मूल परिभाषाएं एक ही प्रकार पर हैं - 'ऑब्जेक्ट')। 'सूची के बारे में कैसे करें।' बनाम 'हैशसेट काउंटर' (दोनों लागू' आईसीओलेक्शन काउंटर')? –
Ani