2011-08-12 15 views
10

निर्धारित करना क्या यह निर्धारित करना संभव है कि गतिशील सदस्य पहुंच किस प्रकार की अपेक्षा करती है? मैंअपेक्षित प्रकार के डायनामिक ऑब्जेक्ट सदस्य का उपयोग

dynamic foo = new MyDynamicObject(); 
int x = foo.IntValue; 
int y = (int)foo.IntValue; 

की कोशिश की है और TryGetMember अवरोधन GetMemberBinder.ReturnType में किसी भी तरह से आपत्ति है। मैंने TryConvert को भी यह सोचकर कार्यान्वित किया कि क्या इसे रूपांतरण करने के लिए कहा जा सकता है, लेकिन यह कभी भी हिट नहीं होता है।

क्या कोई अन्य ओवरराइड है जो मुझे याद आ रहा है जो मुझे यह निर्धारित करने देता है कि कॉलर किस प्रकार चाहता है ताकि मैं उचित रूपांतरण कर सकूं?

उत्तर

9

सी # में, गतिशीलता का उपयोग करते समय, कंपाइलर हमेशा वस्तु के प्रकार को वापस करने के लिए बाइंडर सेट करता है, और उसके बाद अपेक्षित रिटर्न प्रकार में दूसरा गतिशील अंतर्निहित रूपांतरण करता है। तो सी # से प्राप्त होने पर डायनामिक ऑब्जेक्ट पर, GetMemberBinder.ReturnType हमेशा ऑब्जेक्ट होगा, लेकिन यह कहा गया है कि यदि आप TryConvert कार्यान्वित के साथ एक और प्रकार की स्प्रिंगबोर्ड गतिशील ऑब्जेक्ट लौटाते हैं तो आप उस प्रकार को प्राप्त कर सकते हैं, सिवाय इसके कि उपयोगकर्ता var or dynamic चर के रूप में करता है, तो वे एक प्रॉक्सी है जो स्थिर रूप से टाइप होने तक कुछ भी नहीं करेगी।

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

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