मुझे नेमस्पेस और असेंबली के बीच बहुत उलझन हो रही है। हैं System.Data
और System.Web
नामस्थान या सभाएँ?
मैंने देखा है कि इन्हें नामस्थान कहा जाता है और साथ ही वे GAC_32
फ़ोल्डर में मौजूद होते हैं । तो वे वास्तव में क्या हैं?
मुझे नेमस्पेस और असेंबली के बीच बहुत उलझन हो रही है। हैं System.Data
और System.Web
नामस्थान या सभाएँ?
मैंने देखा है कि इन्हें नामस्थान कहा जाता है और साथ ही वे GAC_32
फ़ोल्डर में मौजूद होते हैं । तो वे वास्तव में क्या हैं?
जवाबों:
System.Data
एक नाम स्थान है , System.Data.DLL
(फ़ाइल) एक असेंबली है ।
एक नेमस्पेस एक तार्किक प्रकार का समूह है (ज्यादातर नाम टकराव से बचने के लिए)। एक असेंबली में कई नामस्थानों System.DLL
में कुछ प्रकार हो सकते हैं ( कुछ ...), और एक ही नाम स्थान असेंबलियों (जैसे System.Threading
) में फैला हो सकता है ।
namespace
स्रोत कोड में C # कथन (या किसी अन्य .NET भाषा में समतुल्य) का उपयोग करके, जो आपकी असेंबली बनाने के लिए संकलित है। ध्यान दें कि दूसरी विधानसभा के लिए एक नाम स्थान को फिर से खोलना और उसमें अधिक कक्षाएं जोड़ना संभव है।
Namespace एक तार्किक समूह है जो उसी कार्यक्षमता से संबंधित है। तोSystem.Web
औरSystem.Data
नाम स्थान हैं
MSDN इसका वर्णन करता है:
Namespaces दो तरीकों से C # प्रोग्रामिंग में भारी उपयोग किया जाता है। सबसे पहले, .NET फ्रेमवर्क अपने कई वर्गों को व्यवस्थित करने के लिए नेमस्पेस का उपयोग करता है दूसरे, अपने खुद के नामस्थानों की घोषणा करने से बड़े प्रोग्रामिंग प्रोजेक्ट्स में क्लास और मेथड नामों के दायरे को नियंत्रित करने में मदद मिल सकती है।
असेंबली chunk (precompiled) कोड है जिसे .NET रनटाइम वातावरण द्वारा निष्पादित किया जा सकता है। इसमें एक या एक से अधिक Namespaces शामिल हैं। .NET प्रोग्राम में एक या अधिक असेंबलियाँ होती हैं।
System.Web.dll
और System.Data.dll
विधानसभाएं हैं।
MSDN इसका वर्णन करता है:
असेंबली .NET फ्रेमवर्क अनुप्रयोगों के निर्माण खंड हैं; वे तैनाती, संस्करण नियंत्रण, पुन: उपयोग, सक्रियण स्कूपिंग और सुरक्षा अनुमतियों की मूलभूत इकाई बनाते हैं। एक विधानसभा प्रकार और संसाधनों का एक संग्रह है जो एक साथ काम करने और कार्यक्षमता की एक तार्किक इकाई बनाने के लिए बनाई गई हैं। एक असेंबली में सामान्य भाषा रनटाइम की जानकारी प्रदान की जाती है, इसके लिए प्रकार कार्यान्वयन के बारे में जानकारी होना आवश्यक है। रनटाइम के लिए, एक विधानसभा के संदर्भ के बाहर एक प्रकार मौजूद नहीं है।
संक्षेप में:
सभा:
एक विधानसभा भौतिक कोड समूहीकरण की एक बुनियादी इकाई प्रदान करती है। यह एक आउटपुट इकाई है। यह परिनियोजन की एक इकाई है और संस्करण की एक इकाई है। असेंबली में MSIL कोड होता है।
नाम स्थान:
एक नेमस्पेस लॉजिकल कोड ग्रुपिंग की एक मूलभूत इकाई प्रदान करता है। यह उन नामों का एक संग्रह है, जहां प्रत्येक नाम अद्वितीय है। वे कक्षाओं के एक समूह के लिए तार्किक सीमा बनाते हैं। प्रोजेक्ट-प्रॉपर्टी में नाम स्थान को निर्दिष्ट किया जाना चाहिए।
संक्षेप में:
युक्तियाँ।
एक असेंबली में प्रकारों का एक संग्रह होता है (उदाहरण के लिए l'assembly System में कई नामस्थान शामिल हैं System, System.IO, ecc)। आमतौर पर, असेंबली का नाम एक नेमस्पेस जैसा होता है, जिसमें यह शामिल होता है, लेकिन हमेशा नहीं।
असेंबली और नेमस्पेस के अन्य उदाहरण।
विधानसभा 1 ( CoreAssembly.DLL )
नामस्थानों को शामिल करता है Namespace1.subnamespace1
असेंबली 2 ( ExtensionCoreAssembly.DLL )
नामस्थानों को शामिल करता है Namespace1.subnamespace1
असेंबली का उपयोग नाम संभव है जिसमें विभिन्न नाम स्थान होते हैं और इस तकनीक द्वारा किसी अन्य असेंबली के साथ मौजूदा असेंबली का विस्तार करते हैं।
परिभाषाएं।
सभाओं
एक विधानसभा प्रकार और संसाधनों का एक संग्रह है जो कार्यक्षमता की एक तार्किक इकाई बनाती है। .NET फ्रेमवर्क में सभी प्रकार की असेंबली में मौजूद होना चाहिए; आम भाषा रनटाइम असेंबली के बाहर के प्रकारों का समर्थन नहीं करता है। हर बार जब आप Microsoft Windows® Application, Windows Service, Class Library, या Visual Basic .NET के साथ अन्य एप्लिकेशन बनाते हैं, तो आप एक असेंबली बना रहे होते हैं। प्रत्येक असेंबली को .exe या .dll फ़ाइल के रूप में संग्रहीत किया जाता है। ध्यान दें कि तकनीकी रूप से कई फ़ाइलों को बनाने वाली असेंबलियों को बनाना संभव है, आप ज्यादातर स्थितियों में इस तकनीक का उपयोग करने की संभावना नहीं रखते हैं।
नेमस्पेस
अपने विज़ुअल बेसिक .NET कोड को व्यवस्थित करने का एक और तरीका नामस्थानों के उपयोग के माध्यम से है। नामस्थान असेंबलियों के लिए एक प्रतिस्थापन नहीं हैं, लेकिन एक दूसरी संगठनात्मक विधि जो असेंबली को पूरक बनाती है। नामस्थान प्रकार नामों को समूहीकृत करने और नाम टकराव की संभावना को कम करने का एक तरीका है। एक नामस्थान में अन्य नामस्थान और प्रकार दोनों हो सकते हैं। एक प्रकार के पूर्ण नाम में उस प्रकार के नामस्थानों का संयोजन शामिल होता है।
वे नामस्थान हैं। विधानसभाओं में एक से अधिक नामस्थान हैं। उदाहरण के लिए: System.dll
इनमें नामस्थान (और अधिक) शामिल हैं:
इसके अलावा एक नामस्थान में नेस्टेड नामस्थान हो सकते हैं। वे कोड को व्यवस्थित करने के लिए सिर्फ तार्किक नाम हैं। बस जागरूक रहें, एक DLL
फाइल असेंबल है जिसमें नेमस्पेस (एस) होते हैं।
GAC
है वैश्विक विधानसभा कैश । MSDN के अनुसार :
वैश्विक असेंबली कैश स्टोर असेंबली को विशेष रूप से कंप्यूटर पर कई अनुप्रयोगों द्वारा साझा करने के लिए नामित किया गया है।
इसलिए आमतौर पर उपयोग की जाने वाली असेंबलियों को स्टोर किया जाता है GAC
और इसलिए आपको अपने प्रोजेक्ट डायरेक्टरी में उन सभी असेंबली फाइलों को कॉपी करने की आवश्यकता नहीं होती है, जिन्हें आप अपने प्रोजेक्ट से संदर्भित कर रहे हैं। असेंबली में संग्रहित स्ट्रॉन्ग-नेम असेंबली GAC
हैं । आमतौर पर जब आप किसी संदर्भ को जोड़ते हैं आपके प्रोजेक्ट से असेंबली जो आपकी फ़ाइल की एक प्रति नहीं है, आपके फ़ोल्डर पर बनाई जाएगी..यदि आप चाहें तो आप अपनी असेंबली (उदाहरण के लिए क्लास लाइब्रेरी प्रोजेक्ट) स्ट्रॉन्ग-नेमेड कर सकते हैं। देखें: कैसे करें: एक स्ट्रांग के साथ असेंबली साइन करें नामStrong-Named
.dll
bin\Debug
अन्य लोगों ने इस प्रश्न के बहुत अच्छे और विस्तृत उत्तर दिए हैं। लेकिन मैं यह बताना चाहता हूं कि जब आप निश्चित नहीं होते हैं, तो आप MSDN पर देख सकते हैं। MSDN लाइब्रेरी बहुत स्पष्ट रूप से और बस नाम स्थान और असेंबली की व्याख्या करती है जिसमें किसी भी प्रकार का निवास होता है। यहां तक कि यह फ़ाइल का नाम भी कहता है (in System.Data.dll)
ताकि कोई अस्पष्टता न हो।
फ़ाइल जिसे आप GAC में देखते हैं, System.Data.dll
वह एक असेंबली है और जिसमें नाम स्थान शामिल हैं System.Data
। यदि आप दृश्य स्टूडियो में संदर्भ गुण देखते हैं तो आप देखेंगे:
बाद में यदि आप संदर्भ पर राइट क्लिक करते हैं और ऑब्जेक्ट ब्राउज़र में दृश्य का चयन करते हैं, तो आप उस विशेष असेंबली में नामस्थान देखेंगे।
जैसा कि @amdluigi कहते हैं, "आमतौर पर, असेंबली का नाम एक नेमस्पेस जैसा होता है, जिसमें यह शामिल होता है, लेकिन हमेशा नहीं"।
स्टूडियो में ऑब्जेक्ट ब्राउज़र में System.Data.dll के ऊपर एक स्क्रीनशॉट है। यहां के मुद्दों का पता लगाने के लिए यह एक उत्कृष्ट उदाहरण है। ध्यान दें कि विधानसभा के भीतर निहित अधिकांश नामस्थान System.Data या System.Data के एक उप-नामस्थान हैं।
सामान्य तौर पर, विधानसभा नामों के लिए उनके भीतर नामस्थान से संबंधित होना एक अच्छा अभ्यास है। ध्यान दें कि जब स्टूडियो पहली बार असेंबली बनाने के लिए प्रोजेक्ट बनाता है, तो प्रोजेक्ट प्रॉपर्टीज़ में से एक डिफ़ॉल्ट नाम स्थान है। प्रारंभ में, स्टूडियो डिफ़ॉल्ट नामस्थान को प्रोजेक्ट के समान नाम देता है। यदि आप कभी भी किसी प्रोजेक्ट का नाम बदलना चाहते हैं, तो इसके डिफ़ॉल्ट नामस्थान को भी बदलने पर विचार करें।
दो अतिरिक्त नामस्थान हैं: Microsoft.SqlServer समझ में आता है। कुछ SQL सर्वर प्रकार जो वे एक अलग असेंबली में पैकेज नहीं करना चाहते थे।
लेकिन System.Xml के साथ क्या है ???? एक System.Xml.dll असेंबली है। यह नामस्थान System.Data.dll में क्यों दिखा रहा है?
ध्यान दें कि एक असेंबली एक नेमस्पेस को फिर से खोल सकती है और इसमें और अधिक जोड़ सकती है - यही System.Data.dll System.Xml नाम स्थान के साथ कर रही है।
कारण यह है कि नामस्थानों में शून्य प्रदर्शन निहितार्थ हैं, लेकिन विधानसभाएं बहुत अधिक करती हैं। यदि आपके पास पर्याप्त मात्रा में कोड वाली 1000 कक्षाएं हैं, तो आप एक बहुत बड़ी स्मृति पदचिह्न के साथ एक विधानसभा नहीं चाहते हैं। न तो आप एक कक्षा के साथ 1000 विधानसभाएं चाहते हैं। किसी भी विधानसभा को उसकी सामग्री को निष्पादित करने से पहले स्मृति में लोड करने की आवश्यकता होती है। आप चाहते हैं कि असेंबली में उचित संख्या में परस्पर संबंधित कक्षाएं हों, इसलिए एक बार जब आपके आवेदन ने अपनी किसी एक कक्षा को प्राप्त करने के लिए असेंबली को लोड कर दिया है, तो यह अन्य वर्गों को प्राप्त होता है, जिस एप्लिकेशन को मुफ्त में आवश्यकता होती है। दानेदारता महत्वपूर्ण है: बहुत बड़ा नहीं, बहुत छोटा नहीं, सिर्फ सही।
ध्यान दें कि System.Data.dll System.Xml को फिर से खोल देता है और ठीक एक वर्ग जोड़ता है: XmlDataDocument। ऐसा होता है कि इस वर्ग का उपयोग रिलेशनल डेटा को एक्सएमएल दस्तावेज़ के रूप में व्याख्या करने के लिए किया जाता है। यदि आपका एप्लिकेशन XML का उपयोग कर रहा है, तो उसे इस वर्ग की आवश्यकता नहीं होगी। यदि आपका एप्लिकेशन संबंधित डेटा से संबंधित है, तो यह हो सकता है। तो जबकि XmlDataDocument XmlDocument से विरासत में मिला है और System.Xml नामस्थान में है, यह System.Data.dll असेंबली में पैक किया गया है।
यह सब विशेष रूप से महत्वपूर्ण है यदि आपके पास जावा के साथ एक पृष्ठभूमि है, जहां केवल एक अवधारणा है, पैकेज। .NET में दो हैं, असेंबली और नेमस्पेस। दो ऑर्थोगोनल हैं। एक विधानसभा में स्पष्ट रूप से एक से अधिक नाम स्थान हो सकते हैं। एक असेंबली एक नेमस्पेस को फिर से खोल सकती है और इसमें और जोड़ सकती है - दूसरे शब्दों में, एक नेमस्पेस में टाइप एक असेंबली से अधिक हो सकते हैं।