2011-06-22 15 views
7

dynamic प्रकार की स्थापना के समय और नेट 4 में डीएलआर के साथ, मैं अब 3 विकल्प हैं की घोषणा जब मैं क्या "खुला" प्रकार फोन:गतिशील, वस्तु, वार

  • var, करने के लिए स्थानीय स्तर पर निहित प्रकार जोर देना 'क्या' कैसे 'के बजाय,
  • object, System.Object के लिए उर्फ, और
  • dynamic, संकलक जांचों को अक्षम, विधियां जोड़ने/रनटाइम पर गुण

हालांकि वहां इनके बारे में बहुत कुछ लिखा गया है, मुझे जो कुछ भी मिला है, उन्हें एक साथ नहीं रखा गया है, और मुझे कबूल करना है, यह अभी भी थोड़ा अस्पष्ट है।

इस LINQ, लैम्ब्डा अभिव्यक्तियों, अज्ञात प्रकारों, प्रतिबिंब में जोड़ें ... और यह अधिक अशक्त हो जाता है।

मैं इन अवधारणाओं को समझने में मेरी सहायता करने के लिए कुछ उदाहरण, शायद विपरीत फायदे/नुकसान देखना चाहता हूं, साथ ही यह समझने में मेरी सहायता करता हूं कि मुझे कब और कहां चुनना चाहिए।

धन्यवाद!

उत्तर

5
  • उपयोग var गुमनाम प्रकार के साथ छोटी और अधिक पठनीय है, या जब काम कर रहे अपने कोड रखने के लिए:

    var dict = new Dictionary<int, List<string>>(); 
    
    var x = db.Person.Select(p => new { p.Name, p.Age }); 
    
  • उपयोग dynamic जब गतिशील बंधन उपयोगी, या आवश्यक है। या जब आपको ऑब्जेक्ट के रनटाइम प्रकार के आधार पर कॉल करने के लिए कौन सी विधि तय करने की आवश्यकता है।

  • जितना संभव हो सके object का उपयोग करें, विशिष्ट प्रकार या जेनेरिक का उपयोग करना पसंद करते हैं।

    object m_lock = new object(); 
    
    lock (m_lock) 
    { 
        // do something 
    } 
    
+0

एक गुमनाम प्रकार का एक उदाहरण नहीं है यही कारण है कि (जब तक 'Name' अपने स्वयं एक गुमनाम है टाइप करें, जो मुझे नहीं लगता कि यह हो सकता है)। –

+0

@ जॉर्ज, हाँ, तय। मुझे नहीं पता कि मैंने इसे इस तरह क्यों लिखा था। – svick

2

var:

बजाय लेखन की:: मैं इसे शॉर्ट कोड रखने के लिए उपयोग

MyFramework.MyClass.MyType myvar = new MyFramework.MyClass.MyType(); 

मैं इसे "लघु" रख सकते हैं:

var myVar = new MyFramework.MyClass.MyType(); 
3

var बिल्कुल के रूप में एक ही है पूर्ण प्रकार लिखना, इसलिए उस चर का उपयोग करें जब एक चर एक प्रकार का होना चाहिए। इसका उपयोग अक्सर LINQ के साथ किया जाता है क्योंकि आप अक्सर LINQ के साथ anonymous types का उपयोग करते हैं।

object सभी वर्गों की जड़ है, और इसलिए इसका उपयोग तब किया जाना चाहिए जब एक चर के पास कई अलग-अलग, असंबंधित/विरासत वाले उदाहरण नहीं होंगे, या जब आप विज्ञापन संकलन समय (उदा। प्रतिबिंब) प्रकार नहीं जानते हैं। यदि संभव हो तो इसका उपयोग आम तौर पर टालना चाहिए।

dynamic उन वस्तुओं के लिए है जो प्रकृति में गतिशील हैं, जिसमें उनके पास विभिन्न विधियां और गुण हो सकते हैं, ये COM के साथ-साथ गतिशील भाषाओं और डोमेन विशिष्ट भाषाओं के साथ बातचीत के लिए उपयोगी हैं।

0

इस article यह फायदे और गतिशील कीवर्ड की सीमाओं देता है पर नज़र डालें: एक जगह है जहाँ यह उपयोगी है अगर तुम सिर्फ लॉक करने के लिए इस्तेमाल किया वस्तु है जब है।

1

var है स्थिर प्रकार तो Type संकलन और कार्यावधि में जाना जाता है

dynamic बहुत वस्तुओं के लिए समान है, लेकिन सीमित नहीं के रूप में यह Object तरीकों के साथ होगा (ताकि पकड़ लिखने की त्रुटियों में मदद करता है), यहाँ Type अनुमानित है रनटाइम पर, इसका उपयोग ऐसे मामलों में किया जाएगा जहां आप कुछ गतिशील व्यवहार प्राप्त करना चाहते हैं।

खैर object के लिए यह इस तरह किसी भी सदस्य है जो आप का उपयोग कर किया जाए नहीं है, जेनेरिक्स अधिक ऐसे मामलों में प्राथमिकता दी जाएगी

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