"#" निर्देश का उपयोग करना और "उपयोग करना" कथन C # में एक ही कीवर्ड का उपयोग क्यों करते हैं?


10

usingनिर्देश हमें उनकी पूरी तरह से योग्य नामों का उपयोग किए बिना प्रकार के लिए पहुँच देता है:

using MyNamespace.Foo.Bar;

यह usingकथन वाक्य-रचना के लिए चीनी try/ finallyब्लॉक्स के रूप में कार्य करता है जो यह सुनिश्चित करता है कि वस्तुओं का निपटान सही तरीके से किया जाए:

using(var x = new MyDisposableClass()) { ... }

इन दोनों स्थितियों का एक दूसरे से कोई लेना देना नहीं है। वे एक ही कीवर्ड का उपयोग क्यों करते हैं?

मुझे संदेह है कि किसी को भी कभी भी दो मामले भ्रमित होंगे, लेकिन कार्यक्षमता के एक नए टुकड़े के लिए नया शब्द नहीं बनाना अजीब लगता है।


एक तरफ के रूप में, मैंने classसी ++ में दोहरे उपयोग के बारे में पढ़ा है (एक वर्ग घोषित करने के लिए, एक टेम्पलेट मापदंडों को परिभाषित करने के लिए), लेकिन दूसरा मामला अंततः अपना स्वयं का कीवर्ड मिला typename, जो मुझे अधिक समझ में आता है।

जवाबों:


7

आप सही हैं कि दोनों उपयोग usingअसंबंधित हैं।

हालांकि, usingदोनों मामलों में उपयोग करने के कई अच्छे कारण हैं।

  • usingबयान नेट 1.0 के लिए बनाया और अर्थ भावना ( "मैं निम्नलिखित कोड में इस नाम स्थान का उपयोग कर रहा") बनाता था
  • दोनों ही मामलों में, usingशब्दार्थ का बोध कराता है। सादे अंग्रेजी में, आप usingएक नाम स्थान हैं या आप usingघोषित डिस्पोजेबल ऑब्जेक्ट हैं।
  • usingकीवर्ड को ओवरलोड करके , भाषा डिजाइनरों को भाषा में एक और आरक्षित शब्द बनाने की आवश्यकता नहीं थी। इससे भाषा को साफ रखने में मदद मिलती है।

यह संभव है कि फिर से अपना समय दिया गया हो, भाषा डिजाइनरों importने दो विकल्पों को अस्वीकार करने के लिए नेमस्पेस घोषणाओं के लिए उपयोग करने के लिए चुना हो सकता है ( using.NET के बाद के संस्करण में एक डिस्पोजेबल ऑब्जेक्ट आया)। हम कभी नहीं जान पाएंगे और यह वास्तव में महत्वपूर्ण नहीं है क्योंकि यह अत्यंत स्पष्ट है कि संदर्भ के कारण आप जिन दो अर्थों का उपयोग कर रहे हैं।

कहा कि सब के बाद, मत जाओ और अपने कोड को using MyNamespace.DisposableObject = DisposableObject;हर जगह नाम स्थान उपनाम के साथ लिटाना।


धन्यवाद। क्या आप "भाषा को साफ रखने में मदद करता है" से आप क्या मतलब निकाल सकते हैं? मेरे दिमाग में, कीवर्ड को ओवरलोड करने से भाषा कम साफ होती है। मुझे लगता है कि एक नया कीवर्ड बनाने और अलग-अलग कार्यात्मकताओं के लिए अलग-अलग कीवर्ड का उपयोग करने के लिए यह क्लीनर होगा।
eigenchris

5
कीवर्ड का उपयोग पहचानकर्ता के रूप में नहीं किया जा सकता है। नए कीवर्ड का परिचय प्रत्येक और हर प्रोग्राम को तोड़ता है जो उस कीवर्ड को पहचानकर्ता के रूप में उपयोग करता है। यदि आप Cetary के संपूर्ण इतिहास में मालिकाना स्रोत कोड, गुप्त स्रोत कोड, सैन्य स्रोत कोड, और इसी तरह से लिखे गए स्रोत कोड की हर पंक्ति तक पहुँच प्राप्त करते हैं, तो आप केवल एक पश्च-संगत तरीके से एक कीवर्ड प्रस्तुत कर सकते हैं।
जोर्ग डब्ल्यू मित्तग

@ JörgWMittag, पूरी तरह से सच नहीं है। C # में प्रासंगिक कीवर्ड का एक पूरा समूह है, जो उन तरीकों से जोड़े गए हैं जिनका मतलब उस नाम के साथ मौजूदा पहचानकर्ता कोड के साथ विरोध नहीं है। varक्लासिक उदाहरण होने के नाते जहां एक इन-स्कोप प्रकार का नाम varकीवर्ड पर पूर्वता लेता है।
डेविड अरनो

@ JörgWMittag या विकल्प संकलक के भाषा संस्करण का चयन करने योग्य है (जैसे g++ --std=c++11, या स्रोत फ़ाइलों को एक बोली निर्दिष्ट करने की अनुमति देने के लिए (जैसे हास्केल (?), रैकेट, पर्ल, यहां तक ​​कि पायथन) में भी एक भाषा डिज़ाइन की जा सकती है। एक तरीका है कि संभावित कीवर्ड पहचान का वाक्य रचना संघर्ष कभी नहीं, कुछ पहचानकर्ता आरक्षित (कि हालांकि अपने रन-ऑफ-द-मिल भाषा सामने एक lexer के साथ एक LALR पार्सर का उपयोग कर लागू करने के लिए मुश्किल हो सकता है) के बिना।
आमोन

1
@eigenchris आप हमेशा एक पहचानकर्ता के रूप में उपयोग करने के लिए keword से पहले प्राप्त कर सकते हैं जैसे@using
Bill Türk

4

भाषा डिजाइनर आमतौर पर खोजशब्दों की संख्या को सीमित करने की कोशिश करते हैं। जब कोई कीवर्ड आरक्षित होता है, तो उसे उपयोगकर्ता कोड में पहचानकर्ता के रूप में उपयोग नहीं किया जा सकता है, जो कि केवल आपके द्वारा आवश्यक शब्द होने पर कष्टप्रद है। अन्य भाषाओं के कोड को पोर्ट करते समय यह भी एक बाधा है - और Microsoft चाहता था कि लोग जावा से C # में कोड पोर्ट करें। C # में जावा से अधिक कीवर्ड हैं, लेकिन प्रत्येक नया कीवर्ड इसे और अधिक कठिन बना देगा। इसके अलावा, .net भाषाओं को विभिन्न भाषाओं में एपीआई की लिखित के साथ बातचीत करने के लिए डिज़ाइन किया गया है, जिसमें समान कीवर्ड नहीं हो सकते हैं, जिससे सार्वजनिक सदस्य भी एक कीवर्ड होने पर झुंझलाहट होती है।

दो उपयोग usingअसंदिग्ध हैं, क्योंकि वे वाक्य रचना में पदों पर दिखाई देते हैं, दोनों मामलों में एक "उपयोग" एक उपयुक्त शब्द है। तो यह एक ही कीवर्ड का पुन: उपयोग करने के लिए समझ में आता है। आप उदाहरण के लिए, खोजशब्दों के पुनः उपयोग के अन्य उदाहरणों पर ध्यान देंगे:

  • new सामान्य बाधाओं में
  • in, foreachऔर भिन्न प्रकार के मापदंडों में
  • defaultएक खंड में switchऔर एक ऑपरेटर के रूप में ( default(T))।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.