Attributes.IsDefined () लापता अधिभार क्यों है?


165

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

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

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

यह ओवरलोड क्यों गायब है?

जवाबों:


170

वहाँ एक System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)और System.Typeव्युत्पन्न से है System.Reflection.MemberInfo

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


के लिए अधिभार ICustomAttributeProviderबहुत समझ भी होगा।
श्री एंडरसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.