2010-12-15 11 views
5

जोड़ा जा रहा है हम MSDN में पढ़ा हम DynamicObject कक्षा का उपयोग करके "नया गतिशील गुण जोड़ना" मैं एक निम्न कार्यक्रमनए गतिशील गुण

public class DemoDynamicObject : DynamicObject 
{ 

} 
class Program 
{ 
    public static void Main() 
    { 
     dynamic dd = new DemoDynamicObject(); 
     dd.FirstName = "abc"; 
    } 
} 

लिखने लेकिन यह क्रम त्रुटि देता है जब मैं इस कार्यक्रम को चलाने: 'DemoDynamicObject' करता है यदि हम डायनामिक ऑब्जेक्ट क्लास का उपयोग कर गतिशील संपत्ति जोड़ते हैं तो 'फर्स्टनाम' की परिभाषा नहीं है, तो यह यह त्रुटि क्यों दे सकती है क्या कोई मुझे कारण और समाधान बता सकता है?

उत्तर

9

अपने आधार वर्ग के रूप में DynamicObject उपयोग करते समय, आप (DynamicObject MSDN documentation के आधार पर) गतिशील गुण आप बना रहे हैं का ट्रैक रखने के TryGetMember और TrySetMember के लिए विशिष्ट ओवरराइड प्रदान करना चाहिए:

class DemoDynamicObject: DynamicObject 
{ 
    Dictionary<string, object> dictionary 
     = new Dictionary<string, object>(); 

    public override bool TryGetMember(
     GetMemberBinder binder, out object result) 
    { 
     string name = binder.Name; 
     return dictionary.TryGetValue(name, out result); 
    } 

    public override bool TrySetMember(
     SetMemberBinder binder, object value) 
    { 
     dictionary[binder.Name] = value; 
     return true; 
    } 
} 

तुम सिर्फ चाहते हैं एक गतिशील वस्तु है जिसमें आप गुण जोड़ सकते हैं, आप बस ExpandoObject इंस्टेंस का उपयोग कर सकते हैं, और डायनामिक ऑब्जेक्ट से प्राप्त कस्टम क्लास को छोड़ सकते हैं।

+0

आपको बहुत धन्यवाद – Vikram

+0

आपका स्वागत है। अगर इस उत्तर ने आपकी समस्या का समाधान किया है, तो आपको इसे स्वीकार किए गए उत्तर को चिह्नित करने पर विचार करना चाहिए। धन्यवाद। – JeremyDWill

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