C # में, कीवर्ड कैसे varकाम करता है ?
C # में, कीवर्ड कैसे varकाम करता है ?
जवाबों:
इसका मतलब यह है कि स्थानीय प्रकार घोषित किया जा रहा है संकलक द्वारा अनुमान लगाया जाएगा:
// 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 केवल दो उपयोग हैं:
var foo = new { Bar = "bar" };आप varस्थानीय लोगों के प्रकार के रूप में उपयोग नहीं कर सकते । इसलिए आप varक्षेत्र / संपत्ति / पैरामीटर / रिटर्न प्रकार घोषित करने के लिए कीवर्ड का उपयोग नहीं कर सकते ।
var foo = new Foo();के रूप में एक ही बात है Foo foo = new Foo();, जिसका अर्थ है कि fooएक Fooसंदर्भ हो सकता है , या किसी भी Foo उप प्रकार के लिए एक संदर्भ , एक सुपर प्रकार नहीं है । Foo
इसका अर्थ है कि डेटा प्रकार संदर्भ से व्युत्पन्न (निहित) है।
से 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();
लेकिन उस जगह पर इस्तेमाल किया जा सकता है जहां पठनीयता का त्याग किया जाता है।
"var" का अर्थ है कि संकलक उपयोग के आधार पर चर के स्पष्ट प्रकार का निर्धारण करेगा। उदाहरण के लिए,
var myVar = new Connection();
आपको टाइप कनेक्शन का एक चर देगा।
यह एक प्रकार की घोषणा करता है जो कि आरंभीकरण में इसे सौंपा गया है।
एक सरल उदाहरण यह है कि कोड:
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क्योंकि उनके पास मौजूद प्रकारों का कोई नाम नहीं है।
क्या आपको कभी ऐसे वैरिएबल इनिशियलाइज़र को लिखने से नफरत है?
XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))
इसलिए, C # 3.0 से शुरू करके, आप इसे बदल सकते हैं
var xmlSerializer = new XmlSerialzer(typeof(int))
एक सूचना: संकलन के दौरान प्रकार का समाधान किया जाता है, इसलिए प्रदर्शन के साथ कोई समस्या नहीं है। लेकिन कंपाइलर को बिल्ड स्टेप के दौरान टाइप का पता लगाने में सक्षम होना चाहिए, इसलिए जैसे कोड var xmlSerializer;बिल्कुल भी कंपाइल नहीं करेगा।
int i = 100;// explicitly typed
var j = 100; // implicitly typed
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 के लिए ज्यादा समय नहीं है। सहेजा गया और आपके प्रोजेक्ट की मापनीयता पर एक बाधा डालता है।
var foo = new Foo(),fooप्रकार का हो सकता हैFooया उसके सुपर वर्गों के किसी भी। वह कोई कानूनी कैसे हो सकता है?