क्या रनटाइम पर विशेषताओं को जोड़ना या रनटाइम पर किसी विशेषता का मान बदलना संभव है?विशेषताएँ सी # में गतिशील रूप से जोड़ा जा सकता है?
उत्तर
विशेषताएं स्थिर मेटाडेटा हैं। असेंब्ली, मॉड्यूल, प्रकार, सदस्य, पैरामीटर, और वापसी मान सी # में प्रथम श्रेणी की वस्तुएं नहीं हैं (उदा।, System.Type
कक्षा केवल एक प्रकार का एक प्रतिबिंबित प्रतिनिधित्व है)। आप एक प्रकार के लिए एक विशेषता का उदाहरण प्राप्त कर सकते हैं और गुणों को बदल सकते हैं यदि वे लिखने योग्य हैं लेकिन इससे विशेषता पर प्रभाव नहीं पड़ेगा क्योंकि यह प्रकार पर लागू होता है।
मुझे विश्वास नहीं है। यहां तक कि यदि मैं गलत हूं, तो आप उम्मीद कर सकते हैं कि आप उन्हें एक संपूर्ण प्रकार में जोड़ रहे हैं, कभी भी उदाहरण किसी प्रकार का नहीं।
नहीं, ऐसा नहीं है।
गुण मेटा-डेटा हैं और संकलित असेंबली में बाइनरी-फॉर्म में संग्रहीत हैं (यही कारण है कि आप केवल उनमें सरल प्रकार का उपयोग कर सकते हैं)।
आप नहीं कर सकते। रनटाइम पर व्युत्पन्न कक्षा उत्पन्न करने और विशेषता जोड़ने के लिए एक वर्कअराउंड हो सकता है, हालांकि यह संभवतः एक ओवरकिल का थोड़ा सा है।
यदि आपको कुछ गतिशील रूप से जोड़ने में सक्षम होने की आवश्यकता है, तो सी # विशेषताएँ नहीं हैं। एक्सएमएल में डेटा भंडारण में देखो। मैंने हाल ही में एक प्रोजेक्ट किया है जिसे मैंने w/विशेषताएं शुरू की हैं, लेकिन अंत में क्रमबद्धता w/xml में स्थानांतरित हो गईं।
आपको क्यों आवश्यकता है? गुण प्रतिबिंब के लिए अतिरिक्त जानकारी देते हैं, लेकिन यदि आप बाहरी रूप से जानते हैं कि आप कौन सी संपत्ति चाहते हैं तो आपको उनकी आवश्यकता नहीं है।
आप डेटाबेस या संसाधन फ़ाइल में बाहरी रूप से आसानी से मेटा डेटा स्टोर कर सकते हैं।
बॉयलरप्लेट उन्मूलन। यदि आप क्लास के भीतर कोड के आधार पर स्वचालित रूप से गुण उत्पन्न कर सकते हैं तो यह आसान नहीं होगा? मैं एसक्यूएल सीएलआर ऑब्जेक्ट्स में बॉयलरप्लेट को कम करने के लिए इस तरह कुछ समझने की कोशिश कर रहा हूं। अन्य भाषाओं में आसान होगा ... देखें http://www.paulgraham.com/avg.html –
यह वास्तव में इस बात पर निर्भर करता है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं।
System.ComponentModel.TypeDescriptor सामान प्रकार, गुणों और ऑब्जेक्ट उदाहरणों में विशेषताओं को जोड़ने के लिए उपयोग किया जा सकता है, और इसमें सीमाएं हैं जिन्हें आप उन गुणों को पुनर्प्राप्त करने के लिए भी उपयोग कर सकते हैं। यदि आप उन गुणों का उपभोग करने वाले कोड को लिख रहे हैं, और आप उन सीमाओं के भीतर रह सकते हैं, तो मैं निश्चित रूप से इसका सुझाव दूंगा।
जहां तक मुझे पता है, संपत्ति ग्रिड नियंत्रण और दृश्य स्टूडियो डिज़ाइन सतह बीसीएल में एकमात्र चीजें हैं जो टाइपडिस्क्रिप्टर सामान का उपभोग करती हैं। असल में, इस तरह वे लगभग आधे चीजें करते हैं जिन्हें उन्हें वास्तव में करने की ज़रूरत होती है।
दरअसल, अधिकांश डेटा-बाध्यकारी 'टाइपडिस्क्रिप्टर' का उपयोग करता है - न केवल 'PropertyGrid'। –
सिल्वरलाइट प्रोजेक्ट में संपत्ति-मेटाडेटा विशेषताओं को जोड़ने के लिए कोई कामकाज (जहां 'टाइपडिस्क्रिप्टर' और 'टाइप डिस्क्रिप्शनप्रोवाइडर' लागू नहीं किए गए हैं? – Shimmy
ध्यान देने योग्य है, TypeDescriptor.GetAttributes() डुप्लिकेट विशेषताओं को संभाल नहीं करता है। यह केवल अंतिम का चयन करता है विशेषता प्रकार। पूर्व '[Attr (1), Attr (2), Attr (3)] 'केवल' Attr (3)' पाया जाता है। – ohmusama
ठीक है, बस अलग होने के लिए, मुझे एक लेख मिला जो प्रतिबिंब का उपयोग कर संदर्भ देता है। ऐसा करने के लिए स्वीकार करें।
यहां लिंक है: http://www.codeproject.com/KB/cs/dotnetattributes.aspx, आप लेख के निचले भाग में कुछ टिप्पणियां भी देखना चाहेंगे, क्योंकि संभावित दृष्टिकोण पर चर्चा की जा रही है।
ध्यान दें कि आप प्रतिबिंब के साथ रनटाइम पर विशेषताओं को बना सकते हैं। कक्षाएं दें, लेकिन आप उन्हें एमिट पैकेज के साथ बनाए गए वर्गों में बाध्य कर सकते हैं, न कि मौजूदा लोगों के लिए। – Panos
यह अभी भी एक अच्छी अंतर्दृष्टि है। –
जावा में मैं मानचित्र का उपयोग करके और कुंजी-मूल्य कोडिंग पर अपना स्वयं का कार्य लागू करके इस पर काम करता था।
http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueCoding/KeyValueCoding.html
लिंक टूटा हुआ है, कृपया अपना उत्तर हटाएं – reggaeguitar
मैं सफलता के बिना System.ComponentModel.TypeDescriptor साथ बहुत मेहनत की कोशिश की। इसका मतलब यह नहीं है कि यह काम नहीं कर सकता है लेकिन मैं इसके लिए कोड देखना चाहता हूं।
काउंटर भाग में, मैं कुछ विशेषता मान बदलना चाहता था। मैंने 2 फ़ंक्शन किए जो उस उद्देश्य के लिए ठीक काम करते हैं।
// ************************************************************************
public static void SetObjectPropertyDescription(this Type typeOfObject, string propertyName, string description)
{
PropertyDescriptor pd = TypeDescriptor.GetProperties(typeOfObject)[propertyName];
var att = pd.Attributes[typeof(DescriptionAttribute)] as DescriptionAttribute;
if (att != null)
{
var fieldDescription = att.GetType().GetField("description", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldDescription != null)
{
fieldDescription.SetValue(att, description);
}
}
}
// ************************************************************************
public static void SetPropertyAttributReadOnly(this Type typeOfObject, string propertyName, bool isReadOnly)
{
PropertyDescriptor pd = TypeDescriptor.GetProperties(typeOfObject)[propertyName];
var att = pd.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
if (att != null)
{
var fieldDescription = att.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldDescription != null)
{
fieldDescription.SetValue(att, isReadOnly);
}
}
}
- 1. जावा एप्लेट्स में कौन सी सुरक्षा जोड़ा जा सकता है?
- 2. getChildFragmentManager() प्रोग्रामेटिक रूप से (गतिशील रूप से) जोड़ा गया टुकड़े?
- 3. गतिशील रूप से जोड़ा गया आंशिक दृश्य
- 4. एसवीजी गतिशील रूप से जोड़ा तत्वों
- 5. गतिशील रूप से जोड़ा गया पंक्ति पंक्तियां
- 6. गतिशील रूप से लोड किया जा सकता है जावास्क्रिप्ट अनलोड किया जा सकता है?
- 7. गतिशील रूप से सी #
- 8. सी # गतिशील रूप से
- 9. गतिशील रूप से जोड़ा गया एचटीएमएल तत्व jQuery
- 10. optgroups जोड़ा जा रहा है जावास्क्रिप्ट का उपयोग कर गतिशील
- 11. Jquery .on ('परिवर्तन') गतिशील रूप से जोड़ा तत्वों
- 12. गतिशील रूप से जोड़ा DataTemplate - कन्वर्टर के लिए StaticResource
- 13. गतिशील रूप से जोड़ा गया चयन तत्व इंटरनेट एक्सप्लोरर
- 14. फ़ायरफ़ॉक्स गतिशील रूप से जोड़ा गया सिल्वरलाइट 5 नियंत्रण
- 15. वालग्रिंड: संभावित रूप से खोया जा सकता है निश्चित रूप से खो दिया जा सकता है?
- 16. गतिशील रूप से servletConfig
- 17. रूबी ऑब्जेक्ट में विधियों को कितने तरीकों से जोड़ा जा सकता है?
- 18. उद्देश्य-सी में गतिशील रूप से तत्काल कक्षाएं, संभव है?
- 19. लिनक्स में गतिशील रूप से
- 20. गतिशील रूप से जेसीम्बोबॉक्स
- 21. एक गतिशील वस्तु से गतिशील रूप से
- 22. विशेषताएँ।
- 23. गतिशील रूप से ग्रिडव्यू
- 24. गतिशील रूप से जावा
- 25. मास्टरपेज गतिशील रूप से
- 26. गतिशील रूप से गतिशील HTML
- 27. कस्टम ड्रूपल दिनांक प्रारूप कैसे जोड़ा जा सकता है?
- 28. गतिशील रूप से गतिशील वस्तु
- 29. गतिशील रूप से कक्षा
- 30. गतिशील रूप से
TypeDescriptor.AddAttributes (ऑब्जेक्ट, विशेषता []) लक्ष्य घटक उदाहरण में कक्षा-स्तर विशेषताओं को जोड़ता है। –