2010-02-22 15 views
10

.Net में, विशेषता विशेषता है जो संकलन-समय या रन-टाइम या दोनों पर उपयोग की जाती है? क्या आप मुझे कुछ उदाहरण दे सकते हैं?क्या .NET विशेषता सुविधा संकलन-समय या रन-टाइम या दोनों पर उपयोग की जाती है?

उत्तर

8

गुण संकलन समय पर असेंबली के मेटाडेटा के रूप में आउटपुट होते हैं। यह मेटा डेटा तब प्रतिबिंब के माध्यम से रनटाइम पर उपयोग किया जाता है - उदाहरण के लिए GetCustomAttributes() का उपयोग करना।

कुछ विशेषताओं का संकलन समय संकलन समय पर भी किया जाता है। उदाहरण के लिए संकलक AttributeUsageAttribute को यह निर्धारित करने के लिए देखता है कि किसी विशेष ऑब्जेक्ट के लिए कोई विशेषता उपयोग की जा सकती है या नहीं।

+1

कंपाइलर कंपाइलर समय पर ObsoleteAttribute का भी उपयोग करता है। – plinth

1

गुण संकलन समय पर कोड में संकलित किए जाते हैं, लेकिन अक्सर इन्हें रनटाइम पर ट्रिगर्स के रूप में अलग-अलग करने के लिए उपयोग किया जाता है।

0

संकलक जोड़ता है जिसे किसी विशेषता के साथ सजाए गए ऑब्जेक्ट में मेटाडेटा कहा जाता है। यह मेटाडाटा, चाहे गुणों के माध्यम से बनाया गया हो या अन्यथा, Reflection के माध्यम से रन-टाइम पर सभी पहुंच योग्य है। इस प्रकार, आप गुणों के साथ सजाने के लिए और फिर प्रोग्राम चलाते समय विवरण पढ़ सकते हैं। हालांकि, यह कहने के लिए कि मेटाडेटा संकलन समय पर "प्रयुक्त" है, यह बिल्कुल सही नहीं है, क्योंकि कंपाइलर परवाह नहीं है कि मेटाडेटा क्या है।

+1

-1: कुछ मामलों में गुण सार्थक तरीकों से संकलन को प्रभावित करते हैं। उदाहरण के लिए, सशर्त विशेषता मुख्य रूप से संकलन समय के दौरान उपयोग के लिए होती है, और यदि गलत तरीके से उपयोग की जाती है तो संकलक त्रुटियों को ट्रिगर कर सकते हैं। – Brian

+0

हाँ आप सही हैं ... मैं उन मामलों के बारे में भूल गया ... अप्रचलित एक और है। –

12

अधिकांश केवल रनटाइम पर उपयोग किए जाते हैं। एक बहुत ही सीमित संख्या संकलक द्वारा उपयोग किया जाता है, जिनमें शामिल हैं:

  • [Conditional(...)] - निर्माण प्रतीकों प्रति विधि कॉल छोड़
  • [Obsolete(...)] - एक CLI ध्वज के रूप में लिखा जाता है - निर्माण आउटपुट के रूप में एक चेतावनी/त्रुटि
  • [Serializable] फेंकना
  • [Extension] - विस्तार के तरीकों के लिए इस्तेमाल किया
  • [AttributeUsage] - कैसे प्रभावित करता विशेषताओं लागू होते हैं
  • -

[AssemblyVersion], [AssemblyFileVersion] आदि जैसी कई चीजें हैं जो असेंबली फ़ाइल बनाते समय कंपाइलर द्वारा उपयोग की जाती हैं, और [InternalsVisibleTo] जैसी चीजें जो पहुंच को प्रभावित करती हैं।

इसके अतिरिक्त, पोस्टशर्प जैसे टूल विशेषताओं के आधार पर अतिरिक्त पोस्ट-संकलन चरण करते हैं।

कुछ अन्य विशेषताएं हैं जो संकलक जेनरेट किए गए प्रकार/विधियों (एनन-विधियों/प्रकारों, इटरेटर ब्लॉक आदि के लिए) जोड़ सकते हैं।

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