मैं कह सकते हैं वर एक प्रकार है, या मैं कहना वर एक कीवर्ड कि संकलक प्रकार निर्धारित करने के निर्देश देता है क्या ज़रूरत है?
यह इस बात पर निर्भर करता है कि आप इसे कैसे देखते हैं। गंभीरता से!
सी # कंपाइलर कार्यक्रमों पर तीन प्रकार के विश्लेषण करता है, प्रत्येक बाद के विश्लेषण पिछले एक के परिणाम का उपभोग करते हैं। हम पहले प्रकार के विश्लेषण लेक्सिकल विश्लेषण करते हैं; हम पाठ लेते हैं और इसे टोकन की एक श्रृंखला में बदल देते हैं। मान लीजिए आपके पास
class C { static void Main(){ var x = 123; } }
हम पहले यह निर्धारित है कि उन टोकन वर्ग पहचानकर्ता (सी) LEFTBRACE static void पहचानकर्ता (मुख्य) LEFTPAREN RIGHTPAREN LEFTBRACE IDENTIFIERTHATMIGHTBEAKEYWORD (वर) पहचानकर्ता (एक्स) के बराबर है पूर्णांक (123) SEMICOLON RIGHTBRACE RIGHTBRACE हैं।
विश्लेषण के इस चरण में, "var" उस पर एक नोट के साथ एक पहचानकर्ता है जो कहता है कि यह कीवर्ड var हो सकता है, पहचानकर्ता var नहीं।
अगला विश्लेषण हम करते हैं व्याकरण विश्लेषण जहां टोकन समूह में व्यवस्थित होते हैं जो "पार्स पेड़" बनाते हैं। इस मामले में टोकन इस पेड़ में आयोजित किया जाएगा इस बिंदु वर एक प्रकार, व्याकरण की दृष्टि से के रूप में वर्गीकृत किया गया है पर
declaration of class: CLASS
class name: IDENTIFIER(C)
class body begins: LEFTBRACE
declaration of method:
method modifier: STATIC
return type: VOID
method name: IDENTIFIER(Main)
formal parameter declarations:
formal parameter declarations begin: LEFTPAREN
formal parameter declarations end: RIGHTPAREN
method body:
method body begins: LEFTBRACE
local declaration statement:
type: IDENTIFIERTHATMIGHTBEAKEYWORD(var)
local name: IDENTIFIER(x)
initializer:
assignment operator: EQUALS
integer literal expression: INTEGER(123)
statement ends: SEMICOLON
method body ends: RIGHTBRACE
class body ends: RIGHTBRACE
(खरोज पेड़ में नेस्टिंग स्तर इंगित करता है)। यह जगह पर हम एक प्रकार की घोषणा की उम्मीद करेंगे यदि यह एक व्याकरणिक कानूनी कार्यक्रम है।
लेकिन इस बिंदु पर हम नहीं जानते कि "var" किसी प्रकार को संदर्भित करता है या किसी कीवर्ड के रूप में उपयोग किया जा रहा है। इसके लिए अर्थपूर्ण विश्लेषण की आवश्यकता है।
जब हम पार्स पेड़ का अर्थपूर्ण विश्लेषण करते हैं तो हम कहते हैं, "ठीक है, एक कक्षा सी है, यह एक विधि मुख्य है, जो स्थानीय चर एक्स की घोषणा करता है। उस स्थानीय चर का प्रकार क्या है?"
इस बिंदु पर दो संभावनाएं हैं। पहली संभावना यह है कि वैश्विक नामस्थान में "var" नामक एक वर्ग, संरचना, enum, इंटरफ़ेस या प्रतिनिधि प्रकार है। (इस कार्यक्रम खंड में कोई "उपयोग" निर्देश नहीं हैं इसलिए हमें किसी अन्य नामस्थान की जांच करने की आवश्यकता नहीं है, और प्रकार आंशिक नहीं है इसलिए हमें किसी अन्य प्रकार की घोषणाओं की जांच करने की आवश्यकता नहीं है)। हम सभी संदर्भित असेंबली के वैश्विक नामस्थान को "var" नामक एक प्रकार की तलाश में खोजते हैं। हम अन्य सभी फ़ाइलों में प्रकार की घोषणाओं के अर्थपूर्ण विश्लेषण भी करते हैं, फिर से, var नामक एक प्रकार की तलाश करते हैं।
यदि हमें कोई मिलता है, तो "var" उस प्रकार को संदर्भित करता है।
यदि हमें कोई नहीं मिलता है तो हम मानते हैं कि "var" का उपयोग प्रासंगिक कीवर्ड के रूप में किया जा रहा है जो एक स्पष्ट रूप से टाइप किए गए स्थानीय को प्रस्तुत करता है।
तो, आपके सवाल का जवाब देना:
lexically, कोड टुकड़ा "var" इस पर एक टिप्पणी है कि कहते हैं, "वैसे, यह वास्तव में एक कीवर्ड हो सकता है" के साथ एक पहचानकर्ता टोकन है।
याकरण, टोकन "var" जब यह व्याकरण जहां एक प्रकार की उम्मीद है में एक पद पर प्रकट होता है एक प्रकार है।
शब्दार्थ, प्रकार वाक्य रचना "var" एक प्रकार वहाँ वर बुलाया दायरे में एक प्रकार है जब है, यदि कोई ऐसा प्रकार नहीं है और "var" का उपयोग स्थानीय घोषणा के प्रकार के रूप में किया जा रहा है तो टाइप सिंटैक्स "var" किसी प्रकार का संदर्भ नहीं देता है। इसके बजाय, यह स्थानीय प्रकार के स्थानीय प्रकार का अनुमान लगाने के लिए संकलक के लिए एक निर्देश है।
और क्या आप कृपया मुझे बता सकते हैं कि एमएसडीएन आलेख में 'अंतर्निहित प्रकार var' का अर्थ क्या है? बिट यहां अनुवाद में खो गया;) सवाल को थोड़ा सा संपादित किया गया, आप बहुत तेज़ ... –
@ कैस्पर: इसका मतलब है कि आप चर के प्रकार की घोषणा करने के लिए 'var' का उपयोग कर सकते हैं, इस मामले में चर के संकलन-समय प्रकार दाईं तरफ अभिव्यक्ति का प्रकार है। –
प्रारूपण को खोना महत्वपूर्ण नहीं है, यह 'अंतर्निहित प्रकार ** var **' है। वर एक अंतर्निहित टाइपिंग है जिसमें वास्तविक प्रकार को संकलक द्वारा निर्धारित किया गया है, जिसे 'var i = 10;', स्पष्ट रूप से टाइप किए गए चर के विपरीत, यानी 'int i = 10;' वास्तव में लागू का अर्थ है निहित या अनुमानित प्रकार। क्या उससे मदद हुई? – Lazarus