2009-12-17 15 views
50

संभव डुप्लिकेट:
What’s the difference between dynamic(C# 4) and var?वर बनाम गतिशील

क्या .NET 4.0 (वी.एस. 2010) में गतिशील और वर कीवर्ड के बीच अंतर है। एमएसडीएन के मुताबिक, गतिशीलता की परिभाषा है - डायनामिक लुकअप आपको विधि, ऑपरेटर और इंडेक्सर कॉल, प्रॉपर्टी और फील्ड एक्सेस्स लिखने की अनुमति देता है, और यहां तक ​​कि ऑब्जेक्ट्स ऑब्जेक्ट्स भी देता है जो सी # की सामान्य स्थिर बाध्यकारी को बाईपास करता है और इसके बजाय गतिशील रूप से हल हो जाता है।

जबकि var के लिए परिभाषा है - एक स्पष्ट रूप से टाइप किए गए स्थानीय चर को दृढ़ता से टाइप किया गया है जैसे आपने स्वयं को प्रकार घोषित किया था, लेकिन संकलक टाइप करता है।

नीचे कोड संदर्भ में इस में क्या भिन्नता है:

var a1 = new A(); 
a1.Foo(1); 

dynamic a2 = new A(); 
a2.Foo(1); 
+0

देखें http://stackoverflow.com/questions/961581/whats-the-difference-between-dynamicc-4-and-var –

उत्तर

90

var मतलब है स्थिर प्रकार मान लिया जाता है - अपने मामले में यह बिल्कुल

A a1 = new A(); 

के बराबर सभी बंधन अभी भी पूरी तरह से स्थिर किया जाता है है। यदि आप जेनरेट कोड देखते हैं, तो यह उपर्युक्त घोषणा के समान ही होगा।

dynamic का अर्थ है कि a2 का उपयोग कर सभी अभिव्यक्ति संकलन समय के बजाय निष्पादन समय पर बाध्य है, इसलिए यह गतिशील रूप से व्यवहार कर सकती है। संकलक यह जांच नहीं करेगा कि Foo विधि मौजूद है या नहीं - व्यवहार निष्पादन समय पर निर्धारित होता है। दरअसल, यदि ऑब्जेक्ट IDynamicMetaObjectProvider लागू करता है तो यह निर्णय ले सकता है कि निष्पादन समय पर कॉल के साथ क्या करना है, विधि कॉल (या अन्य प्रकार के उपयोग) का जवाब देना - दूसरे शब्दों में, "असली" होना आवश्यक नहीं है विधि Foo कहा जाता है।

यदि आप गतिशील स्थिति में जेनरेट किए गए कोड को देखते हैं, तो आपको कॉल साइट्स और बाइंडर्स के साथ सभी प्रकार की अजीब और अद्भुत चीज़ें मिलेंगी।

14

var मामले में, एक() संकलन के दौरान उस पर एक .Foo(int) विधि होना आवश्यक है।

dynamic मामले में, ऐसा नहीं है।

24

var टाइप सुरक्षित है, जिसमें यह टाइप अनुमान का उपयोग करता है। लेखन var a = new A();A a = new A(); के लिए एक शॉर्टेंड है। एक वेरिएबल जिसे घोषित किया गया है dynamic सुरक्षित नहीं है और संकलक यह जांचने के लिए कुछ भी नहीं करता है कि आप जिस तरीके से कॉल करते हैं, वह मौजूद है।

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