मेरे पास C ++ पृष्ठभूमि है और मैं इस प्रश्न के उत्तर से पूरी तरह से समझता हूं और सहमत हूं: "नाम स्थान का उपयोग क्यों कर रहा है;" बुरा अभ्यास माना जाता है?
इसलिए मैं चकित हूं कि, C # के साथ कुछ अनुभव होने पर, मुझे वहां ठीक इसके विपरीत दिखाई देता है:
using Some.Namespace;
सचमुच हर जगह इसका उपयोग किया जाता है। जब भी आप एक प्रकार का उपयोग करना शुरू करते हैं, तो आप पहले उसके नाम स्थान के लिए एक निर्देश का उपयोग करते हैं (यदि यह पहले से ही नहीं है)। मुझे याद नहीं आ रहा है कि एक- .cs
फ़िले को देखा नहीं था जिसके साथ शुरू नहीं हुआ था using System; using System.Collections.Generic; using X.Y.Z; etc...
। वास्तव में, यदि आप विज़ुअल स्टूडियो विज़ार्ड के माध्यम से एक नई फ़ाइल जोड़ते हैं, तो यह स्वचालित रूप से कुछ निर्देशों का उपयोग करके वहां जोड़ता है, भले ही आपको उनकी आवश्यकता न हो। इसलिए, जबकि C ++ समुदाय में आप मूल रूप से पाला जाता है, C # भी ऐसा करने के लिए प्रोत्साहित करता है। कम से कम इस तरह से यह मुझे प्रतीत होता है।
अब, मैं समझता हूँ कि C # और C ++ में निर्देशों का उपयोग करना बिल्कुल एक ही बात नहीं है। इसके अलावा, मैं समझता हूं कि using namespace
सी ++ में आप जिन सबसे खराब चीजों को कर सकते हैं, उनमें से एक को हेडर फाइल में डालते हैं, हेडर फाइलों की अवधारणा की कमी के कारण C # में कोई समकक्ष बुरा समकक्ष नहीं है और #include
।
हालांकि, उनके मतभेदों के बावजूद, सी # और सी ++ में निर्देशों का उपयोग करना एक ही उद्देश्य की सेवा करता है, जो केवल SomeType
हर समय टाइप करने के लिए होता है, बजाय लंबे समय तक Some.Namespace.SomeType
(सी ++ के ::
बजाय .
)। और इसी उद्देश्य के साथ, यह खतरा मुझे भी समान प्रतीत होता है: टकराव का नामकरण।
सबसे अच्छे मामले में यह एक संकलन त्रुटि का परिणाम है, इसलिए आपको "केवल" इसे ठीक करना होगा। सबसे बुरे मामले में, यह अभी भी संकलित करता है और कोड चुपचाप अलग-अलग चीजें करता है जो आप इसे करने का इरादा रखते हैं। तो मेरा सवाल है: क्यों (जाहिरा तौर पर) C # और C ++ में असमान रूप से खराब माने जाने वाले निर्देशों का उपयोग कर रहे हैं?
एक उत्तर के कुछ विचार जो मेरे पास हैं (इनमें से कोई भी मुझे वास्तव में संतुष्ट नहीं करता है, हालांकि):
नेमस्पेस (C ++ में से सी # में बहुत लंबे समय तक और भी बहुत कुछ नेस्ट हो जाते हैं
std
बनामSystem.Collection.Generic
)। तो, इस तरह से कोड को डी-नॉइज़ करने में अधिक इच्छा और अधिक लाभ है। लेकिन अगर यह सच है, तब भी यह तर्क तभी लागू होता है जब हम मानक नामस्थानों को देखते हैं। कस्टम लोगों का कोई भी छोटा नाम हो सकता है, जैसे C # और C ++ दोनों में।नामस्थान C # की तुलना में C # में "अधिक बारीक दानेदार" प्रतीत होते हैं। उदाहरण के लिए, C ++ पूरे मानक पुस्तकालय में निहित है
std
(प्लस कुछ छोटे नेस्टेड नामस्थान तरहchrono
), जबकि सी # में आपSystem.IO
,System.Threading
,System.Text
आदि तो, नाम टकराव के होने का खतरा कम है। हालांकि, यह केवल एक आंत की भावना है। मैंने वास्तव में गिनती नहीं की कि आप कितने नामों के साथ "आयात" करते हैंusing namespace std
औरusing System
। और फिर, भले ही यह सच हो, यह तर्क केवल मानक नामस्थानों को देखते हुए लागू होता है। अपने खुद के डिजाइन किए जा सकते हैं ठीक दानेदार के रूप में आप चाहते हैं, दोनों सी # और सी ++ में।
क्या और भी तर्क हैं? मैं विशेष रूप से वास्तविक कठिन तथ्यों में रुचि रखता हूं (यदि कोई हो) और राय में इतना नहीं है।
Ext(this T t, long l)
उस एक्सटेंशन विधि पर विचार करें जिसके माध्यम से कॉल किया जाता है t.Ext(0)
। यदि आप फिर एक और नामस्थान जोड़ते हैं जिसमें एक विस्तार विधि होती है Ext(this T t, int i)
, तो वह एक बजाय बुलाया जाएगा। लेकिन मैं C # (अभी तक) का विशेषज्ञ नहीं हूं।