C # में "var" का क्या अर्थ है? [डुप्लिकेट]


जवाबों:


160

इसका मतलब यह है कि स्थानीय प्रकार घोषित किया जा रहा है संकलक द्वारा अनुमान लगाया जाएगा:

// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";

विशेष रूप से, varगतिशील प्रकार के होने के लिए एक चर को परिभाषित नहीं करता है। तो यह कानूनी नहीं है:

var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints

var केवल दो उपयोग हैं:

  1. इसे वेरिएबल घोषित करने के लिए कम टाइपिंग की आवश्यकता होती है, खासकर जब एक वेरिएबल को नेस्टेड जेनेरिक प्रकार घोषित किया जाता है।
  2. किसी अनाम प्रकार की वस्तु का संदर्भ संग्रहीत करते समय इसका उपयोग किया जाना चाहिए, क्योंकि प्रकार का नाम अग्रिम में नहीं जाना जा सकता है: var foo = new { Bar = "bar" };

आप varस्थानीय लोगों के प्रकार के रूप में उपयोग नहीं कर सकते । इसलिए आप varक्षेत्र / संपत्ति / पैरामीटर / रिटर्न प्रकार घोषित करने के लिए कीवर्ड का उपयोग नहीं कर सकते ।


@cdhowie क्या होगा अगर, जबकि कहा, var foo = new Foo(), fooप्रकार का हो सकता है Fooया उसके सुपर वर्गों के किसी भी। वह कोई कानूनी कैसे हो सकता है?
— जॉन स्ट्रोड

3
@Djack यह कानूनी नहीं है, और यह मामला नहीं है। var foo = new Foo();के रूप में एक ही बात है Foo foo = new Foo();, जिसका अर्थ है कि fooएक Fooसंदर्भ हो सकता है , या किसी भी Foo उप प्रकार के लिए एक संदर्भ , एक सुपर प्रकार नहीं है । Foo
— cdhowie

15

इसका अर्थ है कि डेटा प्रकार संदर्भ से व्युत्पन्न (निहित) है।

से http://msdn.microsoft.com/en-us/library/bb383973.aspx

विजुअल C # 3.0 में शुरू होने से, वैरिएबल जिन्हें विधि क्षेत्र में घोषित किया जाता है, उनमें एक निहित प्रकार का संस्करण हो सकता है। एक अनुमानित टाइप किया हुआ स्थानीय चर दृढ़ता से टाइप किया जाता है जैसे कि आपने स्वयं टाइप किया था, लेकिन कंपाइलर प्रकार को निर्धारित करता है। निम्नलिखित दो घोषणाएं कार्यात्मक रूप से समतुल्य हैं:

var i = 10; // implicitly typed
int i = 10; //explicitly typed

var कीबोर्ड टाइपिंग और दृश्य शोर को खत्म करने के लिए उपयोगी है, जैसे,

MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();

हो जाता है

var x = new MyReallyReallyLongClassName();

लेकिन उस जगह पर इस्तेमाल किया जा सकता है जहां पठनीयता का त्याग किया जाता है।


9

"var" का अर्थ है कि संकलक उपयोग के आधार पर चर के स्पष्ट प्रकार का निर्धारण करेगा। उदाहरण के लिए,

var myVar = new Connection();

आपको टाइप कनेक्शन का एक चर देगा।


7

यह एक प्रकार की घोषणा करता है जो कि आरंभीकरण में इसे सौंपा गया है।

एक सरल उदाहरण यह है कि कोड:

var i = 53;

53 के प्रकार की जांच करेंगे, और अनिवार्य रूप से इसे फिर से लिखेंगे:

int i = 53;

ध्यान दें कि हमारे पास हो सकता है:

long i = 53;

यह var के साथ नहीं होगा। हालांकि इसके साथ हो सकता है:

var i = 53l; // i is now a long

इसी तरह:

var i = null; // not allowed as type can't be inferred.
var j = (string) null; // allowed as the expression (string) null has both type and value.

यह जटिल प्रकारों के साथ एक मामूली सुविधा हो सकती है। अनाम प्रकारों के साथ यह अधिक महत्वपूर्ण है:

var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name};
foreach(var j in i)
  Console.WriteLine(j.ID.ToString() + ":" + j.Name);

यहाँ परिभाषित करने iऔर jउपयोग करने के अलावा और कोई तरीका नहीं है varक्योंकि उनके पास मौजूद प्रकारों का कोई नाम नहीं है।


5

क्या आपको कभी ऐसे वैरिएबल इनिशियलाइज़र को लिखने से नफरत है?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))

इसलिए, C # 3.0 से शुरू करके, आप इसे बदल सकते हैं

var xmlSerializer = new XmlSerialzer(typeof(int))

एक सूचना: संकलन के दौरान प्रकार का समाधान किया जाता है, इसलिए प्रदर्शन के साथ कोई समस्या नहीं है। लेकिन कंपाइलर को बिल्ड स्टेप के दौरान टाइप का पता लगाने में सक्षम होना चाहिए, इसलिए जैसे कोड var xmlSerializer;बिल्कुल भी कंपाइल नहीं करेगा।


0
  • जैसा कि नाम से ही पता चलता है, var बिना किसी डेटा प्रकार के परिवर्तनशील है।
  • यदि आप नहीं जानते हैं कि किस प्रकार का डेटा किसी भी विधि द्वारा वापस किया जाएगा, तो ऐसे मामले var का उपयोग करने के लिए अच्छे हैं।
  • var Implicit type है जिसका मतलब है कि सिस्टम डेटा टाइप को ही परिभाषित करेगा। कंपाइलर "=" ऑपरेटर के दाईं ओर मूल्य के आधार पर अपने प्रकार का अनुमान लगाएगा।
  • int / string आदि स्पष्ट प्रकार हैं क्योंकि यह आपके द्वारा स्पष्ट रूप से परिभाषित किया गया है।
  • Var को केवल स्थानीय चर के रूप में एक विधि में परिभाषित किया जा सकता है
  • एक ही कथन में कई वेरिएशन घोषित और शुरू नहीं किए जा सकते हैं। उदाहरण के लिए, var i = 1, j = 2; अमान्य है।
int i = 100;// explicitly typed 
var j = 100; // implicitly typed

0

var, C # में एक "प्रासंगिक कीवर्ड" है जिसका अर्थ है कि आप इसे केवल उसी वर्ग के संदर्भ में स्थानीय चर के रूप में उपयोग कर सकते हैं जो आप चर का उपयोग कर रहे हैं। यदि आप इसे उस क्लास में उपयोग करने का प्रयास करते हैं जिसे आप "मेन" या किसी अन्य बाहरी वर्ग से कॉल करते हैं, या उदाहरण के लिए इंटरफ़ेस तो आपको CS0825 < https://docs.microsoft.com/en-us/dotnet/ त्रुटि मिलेगी csharp / misc / cs0825 >

जब आप इसे प्रलेखन में उपयोग कर सकते हैं और नहीं देख सकते हैं, तो इसके बारे में टिप्पणी देखें: < https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -लोकल-चर # टिप्पणी >

मूल रूप से, आपको इसका उपयोग केवल तब करना चाहिए जब आप "वैर myValue =" यह मान है "जैसे एक अंतर्निहित मान के साथ एक चर घोषित कर रहे हैं; उदाहरण के लिए" स्ट्रिंग "कहने की तुलना में यह थोड़ा समय बचाता है लेकिन IMHO के लिए ज्यादा समय नहीं है। सहेजा गया और आपके प्रोजेक्ट की मापनीयता पर एक बाधा डालता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.