2010-08-22 9 views
43

मैं सी # 4.0 के साथ आने वाली सभी नई उपहारों को सीखने की कोशिश कर रहा हूं। मैं DynamicObject और ExpandoObject प्रकारों के बीच अंतर को समझने में असफल रहा हूं। ऐसा लगता है कि DynamicObject का उपयोग किया जाता है उदा। जब आप COM/Office ऑब्जेक्ट्स के साथ बात करते समय पाइथन स्क्रिप्ट्स और ExpandoObject से चर का उपयोग करना चाहते हैं। क्या मैं सही हू? उनके उपयोग में क्या अंतर है?सी # 4.0 गतिशील बनाम Expando ... वे कहाँ फिट बैठते हैं?

+2

बेहतर यहाँ जवाब: http://stackoverflow.com/questions/3565481/differences-between-expandoobject-dynamicobject-and-dynamic –

उत्तर

86

विस्तार dynamic रनटाइम पर कौन से सदस्यों को जोड़ा जा सकता है (या हटाया जा सकता है) टाइप करें। dynamic को पाइथन और जावास्क्रिप्ट जैसे गतिशील टाइपिंग भाषाओं के साथ इंटरफेसिंग करते समय .NET को प्रकारों के साथ इंटरऑपरेट करने की अनुमति देने के लिए डिज़ाइन किया गया है।

इसलिए, यदि आप एक गतिशील प्रकार को प्रबंधित करने की जरूरत है: dynamic का उपयोग करें और यदि आप इस तरह XML या JSON के रूप में गतिशील डेटा को संभालने की जरूरत है:

एक expando की घोषणा का उपयोग ExpandoObject

गतिशील और expando बीच संबंध को दर्शाता :

dynamic expando = new ExpandoObject(); 

और एक नया संपत्ति को जोड़ने की क्षमता:

expando.SomeNewStringVal = "Hello World!"; 

कोड की अंतिम पंक्ति एक नया स्ट्रिंग समर्थक बनाता है यही कारण है कि विस्तारित ऑब्जेक्ट में perty SomeNewStringVal कहा जाता है। स्ट्रिंग प्रकार असाइनमेंट से अनुमानित है।

तो एक विस्तार एक गतिशील डेटा प्रकार है जो गतिशील रूप से बदलते डेटा का प्रतिनिधित्व कर सकता है। यह संक्षेप में है। Here's a deeper look at dynamic and expando

पूरा उदाहरण:

using System; 
using System.Dynamic; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     dynamic expando = new ExpandoObject(); 
     expando.SomeNewStringVal = "Hello Brave New Whirrled!"; 
     Console.WriteLine(expando.SomeNewStringVal); 

     // more expando coolness/weirdness: 
     var p = expando as IDictionary<String, object>; 
     p["A"] = "New val 1"; 
     p["B"] = "New val 2"; 

     Console.WriteLine(expando.A); 
     Console.WriteLine(expando.B); 
    } 
} 
+5

वह यह, मैं स्वीकार कर लिया है हालांकि लगता है कि ओपी गतिशील ऑब्जेक्ट और ExpandoObject के बीच अंतर था। – nawfal

+1

बस यह ध्यान में रखना वास्तविक दुनिया में समय पर काम में आता है। मैंने एक्सएमएल या जेसन को क्रमबद्ध करने से पहले डायनामिक प्रतिक्रिया ऑब्जेक्ट्स बनाने के लिए इसे एपीआई का उपयोग किया। इस तरह मैं स्पष्ट गुणों के एक टन को परिभाषित किए बिना अलग-अलग संपत्ति नामों के साथ उप-वर्ग जोड़ सकता हूं। "समूहएल 1": [{"ग्रुपिंग एल 2 :: [{... – user2326106

+0

[' डायनामिक ऑब्जेक्ट'] (https://docs.microsoft.com/en-us/dotnet/api/system.dynamic.dynamicobject?view=netframework- 4.7) unaddressed छोड़ दिया गया था। एमएसडीएन: * रन टाइम पर गतिशील व्यवहार निर्दिष्ट करने के लिए एक बेस क्लास प्रदान करता है। इस वर्ग को विरासत में प्राप्त किया जाना चाहिए; आप इसे तुरंत चालू नहीं कर सकते हैं। * एमएसडीएन पृष्ठ में 'गतिशील ऑब्जेक्ट' के आधार पर सरलीकृत 'ExpandoObject' कार्यान्वयन' इसलिए, दोनों प्रकारों को देर से बाध्यकारी के साथ उपयोग किया जाता है, लेकिन 'ExpandoObject' ठोस (और मुहरबंद) है, जबकि' डायनामिक ऑब्जेक्ट 'कस्टम गतिशील वस्तुओं के लिए केवल आधार श्रेणी है। – Palec

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