2009-10-10 14 views
8

जो मैं समझता हूं, global:: क्वालीफायर आपको एक नामस्थान तक पहुंचने की अनुमति देता है जो एक ही नाम से दूसरे द्वारा छिपा हुआ है। उदाहरण के रूप में MSDN pageSystem का उपयोग करता है। यदि आप अपना नामस्थान System बनाते हैं, तो आप global::System के साथ मूल तक पहुंच सकते हैं। पहली बात जो दिमाग में आई, वह किसी को अपना नामस्थान System क्यों बुलाएगा ?? पृष्ठ यह कहने के लिए चला जाता है कि यह स्पष्ट रूप से अनुशंसित नहीं है, लेकिन बड़ी परियोजनाओं में नामस्थान डुप्लिकेशन बहुत संभव है। यदि/जब ऐसा होता है, तो क्या यह एक संकेत है कि चीजें गलत दिशा में जा रही हैं, या क्या विरोधाभासी नामस्थान होने के वैध कारण हैं?विरोधाभासी नेमस्पेस के लिए वैश्विक :: का उपयोग

+0

क्या कोई अच्छा कोड गंध है? : P –

+0

@rpflo: शायद वह अर्थ है "यह एक गंभीर कोड गंध है?" –

+1

अच्छे कोड के विपरीत, जो lilacs की तरह गंध करता है। :) –

उत्तर

7

एक वैध कारण। नेट 1.1 दिनों में, उदाहरण के लिए, मैं एक रजिस्ट्री वर्ग कि एपीआई रजिस्ट्री कॉल लिपटे लिखा था। शुद्ध मौके से, मैंने जो विधि नाम चुना है, वे बाद में नेट नेट रजिस्ट्री क्लास के समान थे, और उन्होंने वही काम किया, इसलिए मेरे होमग्राउन कोड को अनप्लग करना आसान था। अधिक जटिल सामग्री के लिए, global:: क्वालीफायर के साथ कोड के पुराने, खराब नाम वाले हिस्से का उपयोग करने में सक्षम होना उपयोगी हो सकता है।

जानबूझकर मौजूदा नेट नामस्थान का उपयोग करके कोड का एक नया टुकड़ा नामकरण करना निश्चित रूप से एक कोड गंध होगा।

12

सामान्यतः, global:: का उपयोग "मैं नामस्थान संरचना के शीर्ष पर शुरू करना चाहता हूं" इंगित करने के लिए प्रयोग किया जाता है। अगर मेरे पास MyProduct.System नामक नामस्थान है, तो MyProduct नेमस्पेस में रहने वाली कोई भी चीज़ Microsoft System नामस्थान तक पहुंचने में सक्षम नहीं होगी। क्या यह एक कोड गंध है? शायद कभी-कभी, लेकिन विशेष रूप से सुगंधित नहीं।

7

किसी भी मशीन जेनरेट कोड को global:: का उपयोग करने और उपयोग करने के लिए नामस्थान संघर्षों की संभावना को कम करने के लिए उपयोग करना चाहिए, जिसके बारे में पता नहीं हो सकता है। इसके अलावा, आपके किसी भी कोड जो विवादों में भाग सकता है, इसे अधिक विशिष्ट होने के लिए उपयोग कर सकता है। परस्पर विरोधी नामस्थान होने से घर में पुस्तकालयों कि नेट के पिछले संस्करणों है कि बाद के संस्करणों में जोड़ दिया गया कार्यक्षमता शामिल नहीं किया लिए लिखा गया था के उपयोग हो सकता है के लिए

0

मुझे लगता है कि यह समय-समय पर होता है कि आपके नामस्थानों में से एक का नाम दूसरे का नाम है। उदाहरण के लिए, मेरे पास एक नामस्थान है। Persistence.NHibernate, जहां NHibernate NHibernate असेंबली का रूट नेमस्पेस भी हो सकता है।

मैं किसी भी कोड नहीं दिख रहा है यहाँ गंध, यह सिर्फ isses नामकरण है;)

2

माइक्रोसॉफ्ट उत्कृष्ट पुस्तक Framework Design Guidelines 2nd Ed. में कुछ अच्छा नाम स्थान के दिशा निर्देशों है। आम तौर पर वे comflicts शुरू करने के खिलाफ अनुशंसा करते हैं (उदाहरण के लिए, अपने प्रकार स्ट्रीम नामकरण द्वारा)।

मुझे विश्वास नहीं है कि मैंने कभी भी वैश्विक :: क्वालीफायर का उपयोग किया है। मैं आम तौर पर इसे एक कोड गंध मानता हूं (हालांकि अपवाद हैं, क्योंकि MusiGenesis और छःlettervariables बताते हैं)।

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