2010-07-10 11 views
8

संभव डुप्लिकेट:
Difference between “var” and “object” in C#वर वस्तु बनाम

मैं वर और वस्तु के बीच अंतर पता करना चाहते हैं।

वारा का उपयोग कब करें और ऑब्जेक्ट का उपयोग कब करें।

पेशेवरों और उनका उपयोग करने के विपक्ष।

+0

http://stackoverflow.com/questions/1552881/difference-between-var-and-object-in-c – Mathias

उत्तर

16

var "कंपेलर को मेरे लिए सही चर प्रकार चुनने दें" के लिए सिर्फ शॉर्टेंड है (संकलन-समय प्रकार-अनुमान अधिक सटीक शब्द है)।

object, दूसरी ओर, एक विशिष्ट प्रकार है; अन्य सभी संदर्भ प्रकार object से प्राप्त होते हैं, इसलिए आप object प्रकार के चर के लिए कुछ भी असाइन कर सकते हैं।

+3

के समान ही दिखता है जब तक कि यह एक आदिम नहीं है, इस स्थिति में इसे निर्दिष्ट करने से पहले इसे बॉक्स किया जाना चाहिए 'ऑब्जेक्ट' संदर्भ। –

+0

मुझे लगता है कि चयनित उत्तर में जो कुछ जोड़ा जाना चाहिए वह यह है कि यदि आप var का उपयोग करते हैं तो @Ben Voigt ने कहा, आप इसे कास्ट किए बिना var में संग्रहीत ऑब्जेक्ट में चीजें कर सकते हैं। – Eric

10

var जवाब जब आप पाते हैं अपने आप को पूछ, मैं सच में दो बार है कि लंबे समय के प्रकार का नाम टाइप करने के लिए .: e.g में,

Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>> myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>(); 

क्यों नहीं दोस्त, तुम नहीं है तुम्हारे पास है। बजाय var का उपयोग करें:

var myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>(); 

अब myDict वास्तव में एक Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>> है, तो आप इसे करने के लिए चीजों को जोड़ सकते हैं, यह गणना, आदि

आप object के रूप में यह घोषणा की, तो आप इसे के साथ किसी भी आपरेशन नहीं कर सका जो Dictionary द्वारा प्रदान किए जाते हैं, केवल सभी वस्तुओं के लिए मान्य हैं।

+2

मुझे उस कोड को कार्रवाई में देखना अच्छा लगेगा। –

+0

आपका कंप्यूटर विंडोज चल रहा है? j/k। मैंने उस विशेष प्रकार को बनाया लेकिन मैं उन प्रकारों का उपयोग करने के लिए बहुत मेहनत कर रहा था जो वास्तव में एक साथ संयुक्त हो सकते हैं। –

+0

@ जो, मैं नहीं ... – jonnystoten

4
var foo = "Hello, I am a string!"; 
// foo is a string, so this compiles 
var fooCharArray = foo.ToCharArray(); 

object bar = foo; 
// bar is not a string, so this does not compile 
var barCharArray = bar.ToCharArray(); 

पहले उदाहरण में, संकलक जानता है कि foo एक स्ट्रिंग है और इसलिए हम foo पर स्ट्रिंग तरीकों कॉल कर सकते हैं।

दूसरे उदाहरण में, हम किसी ऑब्जेक्ट में foo स्ट्रिंग को "अपस्टास्ट" करते हैं। अब संकलक नहीं जानता (क्योंकि यह नहीं पता होना चाहिए!) कि bar वास्तव में एक स्ट्रिंग है, और हम bar पर स्ट्रिंग विधियों को कॉल नहीं कर सकते हैं। कंपाइलर किसी ऑब्जेक्ट (या किसी भी बेस प्रकार) से व्युत्पन्न डाउनकास्टिंग को व्युत्पन्न प्रकार (जैसे System.String) तक अनुमति नहीं देगा। संकलन समय प्रकार सुरक्षा नियमों का इसका हिस्सा है।

5

var अभी भी दृढ़ता से टाइप किया गया है लेकिन ऑब्जेक्ट के साथ आपको सब कुछ डालना होगा।

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