2010-09-07 12 views
5

क्या किसी को पता है कि डायनामिक लैंग सुविधाओं का उपयोग कर इंडेक्सर के माध्यम से सीएलआर ऑब्जेक्ट पर विधि कॉल करना संभव है? उदाहरण के लिए, myClrObj["SuperMethod"]() जो मैं आसानी से जावास्क्रिप्ट में कर सकता हूं।सी # गतिशील सूचकांक

अग्रिम धन्यवाद।

उत्तर

1

वहाँ बेहतर तरीके हो सकते हैं, लेकिन एक तरह से मैं जानता हूँ कि चाहते हैं इसे कैसे करना है:

  • एक वर्ग है कि से DynamicObject
  • ओवरराइड उपयुक्त विधि विरासत बनाएं इंडेक्सर
  • के माध्यम से पहुंच कब्जा करने के लिए
  • प्रदत्त इंडेक्सर तर्क
  • एक एक्सटेंशन विधि प्रदान करें जो आपके ऑब्जेक्ट को गतिशील दिखाई देता है, सही डायनामिक ऑब्जेक्ट स्पेशलिज़ के साथ एक प्रतिनिधि प्रदान करता है जो एक प्रतिनिधि को बनाता है और कैश करता है एटियन तत्काल

    dynamic obj = myObj.AsIndexedObj(); obj["Do"]();

+0

ग्रेट विचार, लेकिन यह फिट नहीं है। मेरे पास मौजूदा कक्षाएं हैं जो गतिशील नहीं हैं। – AndrewG

+0

आपको अपनी ऑब्जेक्ट्स को डायनामिक ऑब्जेक्ट से प्राप्त करने की आवश्यकता नहीं है। इसके बजाय, एक एडाप्टर का कुछ बनाएं जो आपके मूल ऑब्जेक्ट की ओर से गतिशील रूप से इंटरैक्ट करता है। इसका लाभ यह है कि यह कई प्रकार के ऑब्जेक्ट में पुन: प्रयोज्य हो जाता है – flq

0

आप ImpromptuInterfsce nuget के माध्यम से उपलब्ध इस्तेमाल कर सकते हैं, यह सरल गतिशील नाम से एक विधि कॉल करने के बनाने के लिए डीएलआर एपीआई लपेटता, दोनों गतिशील और पोको वस्तुओं के लिए काम करता है। पोको वस्तुओं के लिए प्रतिबिंब से तेज़।

Impromptu.InvokeMember(myClrObj,"SuperMethod") 
संबंधित मुद्दे