2010-06-11 11 views
159

एक एसओ सवाल से प्रेरित हो गया। विशेषता वर्ग में IsDefined() विधि के लिए कई ओवरलोड हैं। कवर किए गए गुण असेंबली, मॉड्यूल, सदस्यइन्फो, पैरामीटरइन्फो पर लागू होते हैं। MemberInfo अधिभार में PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo शामिल हैं।विशेषताएँ क्यों हैं Is परिभाषित() गायब अधिभार?

यह अधिकांश विशेषता लक्ष्य का ख्याल रखता है। एक बड़ी बात के अलावा: विशेषता के लिए कोई अधिभार नहीं है। परिभाषित (प्रकार, प्रकार) ताकि आप यह जांच सकें कि कक्षा में कोई विशेषता परिभाषित की गई है या नहीं। या उस मामले के लिए एक संरचना, प्रतिनिधि या enum।

यह नहीं कि यह एक वास्तविक समस्या है, Type.GetCustomAttributes() इसे ठीक कर सकता है। लेकिन सभी BlahInfo प्रकारों में भी यह है। मुझे समरूपता की कमी पर आश्चर्य है। मैं एक उंगली नहीं डाल सकता कि यह टाइप के लिए समस्या क्यों होगी। विरासत की समस्या पर अनुमान लगाने से मुझे यह समझाया नहीं जाता है। मिश्रण में ValueType होने का नेतृत्व हो सकता है, अभी भी समझ में नहीं आता है। मैं "वे भूल गए" नहीं खरीदते हैं, वे कभी नहीं करते हैं।

यह अधिभार क्यों गुम है?

उत्तर

165

System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit) और System.TypeSystem.Reflection.MemberInfo से निकला है।

किसी भी .NET असेंबली के शीर्ष-स्तर वाले कंटेनर में एक असेंबली एक या अधिक मॉड्यूल है। प्रत्येक मॉड्यूल में तब प्रकार और प्रकार होते हैं जिनमें गुण, विधियां या अन्य प्रकार (नेस्टेड प्रकार) जैसे सदस्य हो सकते हैं। यही कारण है कि System.TypeMemberInfo से निकला है ताकि ऑब्जेक्ट मॉडल अन्य प्रकारों सहित सभी चीजों के सदस्यों के रूप में कंटेनरों के रूप में काम करने की अनुमति देता है।

+0

'ICustomAttributeProvider' के लिए अधिभार बहुत अधिक समझ में आएगा। –

संबंधित मुद्दे