2010-09-05 10 views
8

पहले तो मुझे कुछ ऐसा सोचा:
सी # में गतिशील टाइपिंग का उपयोग क्यों करें?

var aName=getAllSomethings(); 

बहुत पढ़ने योग्य नहीं है, और बस जब भ्रम के लिए कोई जगह नहीं है तो मैं गतिशील टाइपिंग इस्तेमाल करेंगे जैसे:

AClassName aName = new AClassName(); 
यहाँ

,

var aName=new AClassName(); 

पठनीय लगता है। लेकिन मैंने पढ़ा है (here) कि गतिशील टाइपिंग भी प्रदर्शन में कीमत के साथ आता है।
मैंने उस लिंक में अन्य सभी पोस्ट पढ़ने की कोशिश की ताकि यह समझ सके कि मुझे गतिशील टाइपिंग का उपयोग करना चाहिए, लेकिन एक अच्छे कारण के साथ भी नहीं आ सकता। क्या मुझे बस इंतजार करना चाहिए जब मैं खुद को बताऊंगा - "यह केवल गतिशील टाइपिंग के साथ हल किया जा सकता है"? या इसका उपयोग करने के लिए बेहतर (व्यावहारिक) कारण हैं?

धन्यवाद।

संपादित करें: मेरे गलती (-:। इस सवाल का यथाशीघ्र बंद हो जाएगा

+2

लेकिन बस आपने कितना सीखा है इसके बारे में सोचें! ;) – Robaticus

+1

@Robaticus: उस पर +1। यही कारण है कि मैं जिद्दी दावा करता हूं कि केवल बेवकूफ सवाल वे हैं जिन्हें नहीं पूछा जाता है, जिससे लोगों को सीखना नहीं पड़ता है। यह प्रश्न एक गलतफहमी को दूर करने में मदद करता है जो मुझे विश्वास है कि यह काफी आम है, इसलिए यह निश्चित रूप से एक उद्देश्य प्रदान करता है। –

+2

इसे बंद करने की कोई आवश्यकता नहीं है, मुझे लगता है कि यह एक काफी आम सवाल है। अन्य लोग अभी भी जानकारी से लाभ उठा सकते हैं। –

उत्तर

26

var नहीं गतिशील टाइपिंग है यह सिर्फ इतना है कि aName के प्रकार संकलक द्वारा लगाए गए अनुमान है

आपका उदाहरण है।। अभी भी पूरी तरह से स्थिर रूप से टाइप किया है, और कोई प्रदर्शन की सजा है। आपका कोड ठीक उसी आईएल में संकलित किया गया है के रूप में यह एक स्पष्ट प्रकार नाम के साथ होगा।

अब सी # 4 में, गतिशील टाइपिंग exis करता है टी, लेकिन यह रूप में लिखा जाएगा:

dynamic aName = new AClassName(); 

मेरा व्यक्तिगत विश्वास है कि गतिशील टाइपिंग अपेक्षाकृत शायद ही कभी सी # 4 में उपयोगी हो सकता है - मूल रूप से जब आप डेटा जो पहले से ही केवल गतिशील रूप में जाना जाता है, उदाहरण के लिए साथ काम कर रहे प्रतिबिंब, या एक्सएमएल नेविगेटिंग।

5

var कीवर्ड का उपयोग गतिशील टाइपिंग नहीं है। var कीवर्ड संकलक द्वारा संभाला जाता है। वेरिएबल को पहले असाइनमेंट के आधार पर चर स्थिर रूप से टाइप किया जाता है।

के प्रकार:

var value = new StringBuilder(); 

StringBuilder है। उस प्रकार को बदलने का कोई तरीका नहीं है (जो गतिशील टाइपिंग की अनुमति होगी)।

जो जॉन स्कीट अपने ब्लॉग में संदर्भित कर रहा है वह dynamic कीवर्ड है। यह एक अन्य जानवर है।

6

यह गतिशील टाइपिंग नहीं है। var संकलन समय पर ज्ञात एक स्थिर प्रकार घोषित करता है और यह टाइप नाम घोषित करने के बराबर होगा। कंपाइलर प्रकार का अनुमान लगाएगा और परिणामी असेंबली में इसे प्रतिस्थापित करेगा।

2

यह गतिशील टाइपिंग नहीं है। गतिशील टाइपिंग "गतिशील" प्रकार (विचित्र रूप से पर्याप्त) के माध्यम से होती है। Var का उपयोग करने पर कोई ओवरहेड नहीं है, यह एक कोडिंग शॉर्टेंड है जो अभी भी दृढ़ता से टाइप किए गए चर उत्पन्न करता है।

2

आप गलत हैं कि गतिशील टाइपिंग क्यों है।

"var" संकलन समय पर चर के प्रकार निकालना प्रकार निष्कर्ष उपयोग करता है। यह तंत्र काफी कठोर है, और इसका कोई प्रदर्शन प्रभाव नहीं है। "Var" के साथ घोषित एक चर अभी भी एक सटीक प्रकार (या उस प्रकार के व्युत्पन्न) हो सकता है।

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

2

के रूप में हर किसी का उल्लेख किया गया है, 'var' कीवर्ड हमें गतिशील टाइपिंग नहीं देता है। प्रकार संकलन समय पर अनुमानित है।

जब मैं सोचता हूं कि यह समझ में आता है तो मैं var का उपयोग करता हूं; अर्थात जब प्रकार स्पष्ट है और यह एक घोषणा के शब्दाडंबर पर कटौती:

Dictionary<string, int>() someDict = new Dictionary<string, int>(); 

यहाँ

var someDict = new Dictionary<string, int>(); 
बजाय

... हालांकि, अपने उदाहरण में:

var aName=getAllSomethings(); 

मैं 'var' का उपयोग नहीं करता क्योंकि, जैसा कि आपने पहले ही देखा है, फिर आपको 'एनीम' क्या है, यह जानने के लिए आपको 'getAllSomethings()' (सी # बीटीडब्ल्यू के लिए खराब नामकरण शैली) का रिटर्न प्रकार देखना होगा। बस कोड को कम पठनीय बनाता है ।

+2

हां, लेकिन - और मैंने पहले यह तर्क दिया है - यह उस फ़ंक्शन का नाम है जो यहां गलत है, न कि 'var'। अगर' var' कभी कुछ कम पठनीय बनाता है, तो यह नहीं है 'var' की गलती, यह आपके द्वारा चुने गए नामों और चर के लिए चुने गए नाम हैं। – JulianR

+1

मैं असहमत हूं। क्या आप वास्तव में विधि के नाम पर प्रत्येक विधि का रिटर्न प्रकार डालते हैं, यानी "GetMemberIdListInt"? वह है बकवास वे XXX भाषा 101 से परिचय में पढ़ाने, अच्छा तरीका नामकरण बात की इस प्रकार की आवश्यकता होती है नहीं –

+0

हालांकि, इस मामले में तुम सही हो;।। विधि (और चर) नाम ओपी के उदाहरण में भयानक है –

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