नियमित सी #/.NET में, उत्तर एक साधारण "नहीं" है। आप जितना अधिक कर सकते हैं वह DynamicMethod
लिख सकता है जो उस प्रकार की विधि (निजी फ़ील्ड्स तक पहुंच) की तरह व्यवहार कर सकता है, लेकिन यह कभी भी एपीआई पर नहीं होगा - आप बस एक प्रतिनिधि के साथ समाप्त हो जाते हैं।
यदि आप dynamic
का उपयोग करते हैं, तो आप जो कुछ भी चाहते हैं वह कर सकते हैं। संलग्न करके ExpandoObject
के साथ को विधियों के स्थान पर को जोड़कर, लेकिन एक कस्टम गतिशील प्रकार पर आप अधिक कुछ भी कर सकते हैं - लेकिन यह केवल dynamic
API का उपयोग करने वाले कॉलर्स को प्रभावित करता है। एक बुनियादी ExpandoObject
उदाहरण के लिए:
dynamic obj = new ExpandoObject();
Func<int, int> func = x => 2*x;
obj.Foo = func;
int i = obj.Foo(123); // now you see it
obj.Foo = null; // now you don't
गुण और घटनाओं (नहीं विधि) के लिए, आप क्या क्रम में दिखाई देता है बदलने के लिए System.ComponentModel
दृष्टिकोण का उपयोग कर सकते हैं, लेकिन यह केवल प्रभावों कॉल जो, System.ComponentModel
के माध्यम से पहुँच जाते हैं जिसका अर्थ है मुख्य रूप से: यूआई डेटा बाध्यकारी। इस प्रकार DataTable
छद्म गुणों के रूप में कॉलम का प्रतिनिधित्व करता है (इस समय के लिए "टाइप किए गए डेटासेट" के बारे में भूलना - यह उन के बिना काम करता है)।
पूर्णता के लिए, मुझे विस्तार विधियों का भी उल्लेख करना चाहिए। वे एक कंपाइलर चाल हैं, रनटाइम चाल नहीं - लेकिन kinda आपको "एड" के छोटे मानों के लिए मौजूदा प्रकार के तरीकों को जोड़ने की अनुमति देता है।
एक अंतिम चाल, आमतौर पर ओआरएम आदि द्वारा उपयोग की जाती है - गतिशील रूप से उपclass प्रकार है, और सबक्लास में अतिरिक्त कार्यक्षमता प्रदान करता है। उदाहरण के लिए, उन्हें अवरुद्ध करने के लिए गुणों को ओवरराइड करना (आलसी लोडिंग, आदि)।
स्रोत
2012-06-22 18:33:19
यह एक आदर्श उदाहरण है कि क्यों SO प्रश्नों में प्रति पोस्ट केवल एक प्रश्न होना चाहिए। मार्क और हेनक ने आपके द्वारा पूछे गए एक अलग प्रश्न का उत्तर दिया, और दोनों अच्छे, सही उत्तर हैं। आप ** सही ** एक के रूप में कौन सा चुनते हैं और स्वीकार करते हैं? इस स्थिति से बचने के लिए कृपया प्रति पोस्ट ** एकल ** प्रश्न पर सीमित रहें, जहां उत्तरदाताओं में से एक को पुरस्कृत किया जाता है और दूसरा नहीं करता है, भले ही दोनों उत्तर अच्छे, सही और आपके प्रश्न का उत्तर दें। –
ठीक है। मैं भविष्य में याद रखने की कोशिश करूंगा। विधियों/वस्तुओं के बजाय प्रश्नों के लिए एकल उद्देश्य सिद्धांत।अब जब कार्य किया गया है, मुझे शायद इसे बदलना नहीं चाहिए। – user420667