2010-06-22 7 views
10

खैर मैं किसी भी पिछले पोस्टिंग मेरे सवाल तो जवाब देने के लिए नहीं मिल सका ....सी #: क्या आप एकाधिक फाइलों में एक नामस्थान विभाजित कर सकते हैं?

मैं सी # और कुछ Windows प्रपत्र बनाने के लिए नया हूँ और पाया है कि यह एक दोनों Program.cs और Form1.cs फ़ाइलें बनाई।

दोनों में, यह "संपर्क" मेरे कार्यक्रम का नाम स्थान के साथ शुरू होता

namespace Contacts 
{ 
    //code here 

इन एक साथ संकलित कर रहे हैं, या वे अभी भी संकलक द्वारा अलग से देखा जाता है?

उत्तर

11

हाँ, आप कर सकते हैं। संपर्क नामस्थान में उन सभी फ़ाइलों को परिभाषित किया जाएगा जो उस नामस्थान को परिभाषित करते हैं।

आप एक ही फ़ाइल में विभिन्न नामस्थानों से संबंधित प्रकारों को परिभाषित भी कर सकते हैं। फ़ाइलें और नामस्थान पूरी तरह से ऑर्थोगोनल अवधारणाएं हैं।

सी # 2.0 के बाद से आप कई फाइलों में कक्षा परिभाषा को भी विभाजित कर सकते हैं। here देखें।

+0

डब्ल्यूटीएफ!मुझे बताया गया है कि 'सी #' में एकाधिक विरासत नहीं है क्योंकि यह "समस्याओं का स्रोत" है, और आप कई फाइलों पर एक ही नामस्थान घोषित कर सकते हैं, सी # "उन्हें" मिश्रण करें ... ** और ** आप कई फाइलों में कक्षा परिभाषा को भी विभाजित कर सकते हैं? गंभीरता से? –

+0

नेमस्पेस प्रकारों को शामिल करने के लिए हैं, और चूंकि प्रकारों को अक्सर अलग-अलग फ़ाइलों में परिभाषित किया जाता है, इसलिए फाइलों में विभाजित नामस्थान बहुत स्पष्ट हैं। कई मुख्यधारा की भाषाएं वही करती हैं। कक्षाओं के लिए तर्क अधिक सूक्ष्म है। उन्हें विभाजित करने से उन मामलों में कोड व्यवस्थित करने में सहायता मिल सकती है जहां आपको एक ही कक्षा में सदस्यों की एक बड़ी संख्या डालने के लिए मजबूर किया जाता है, उदा। डेटा पहुंच या एकीकरण के लिए। यह स्रोत नियंत्रण के साथ भी मदद कर सकता है। आखिरकार यह नियंत्रित करने के लिए आप पर निर्भर है कि स्थिति गन्दा नहीं होती है। एकाधिक विरासत के मामले में चीजें आपके रनटाइम को बनाने के तरीके में गन्दा हो जाती हैं, जो – Mau

+0

है "आखिरकार यह नियंत्रित करने के लिए आप पर निर्भर है कि स्थिति गन्दा नहीं होती है।" यह वाक्य है जो दिखाता है कि आप एक चालाक और अच्छे डेवलपर हैं। और वह वाक्य दिखाता है कि भाषा क्या है इससे कोई फर्क नहीं पड़ता, यह हमेशा "स्थिति को नियंत्रित करने के लिए डेवलपर को समाप्त करता है"। मेरा मतलब यह है कि सी # में एकाधिक विरासत नहीं है क्योंकि यह "समस्याओं का स्रोत" एक गैर-अर्थ है। सी # एक बहुत अच्छी भाषा है और ** ** ** विरासत क्षमताओं होना चाहिए। "समस्या का स्रोत" भाषा के बारे में कभी नहीं है, यह डेवलपर्स आईएमएचओ के बारे में है (यही कारण है कि हम एक वर्कअराउंड के रूप में इंटरफ़ेस का उपयोग करते हैं)। –

6

नामस्थान कक्षा वर्ग के लिए एक उपसर्ग है, कक्षाओं को अलग करने का तरीका। वे अलग से संकलित हैं।

1

एकाधिक फ़ाइलों में नामस्थान को विभाजित करने में कोई समस्या नहीं है, और अधिकांश प्रोग्रामों में आप वही करेंगे।

आमतौर पर सभी .cs फ़ाइलों को C# compiler (csc) के साथ संकलित किया जाएगा।

आप देख सकते हैं इस सेटिंग को बदलकर अपने कोड संकलित किया गया है:

उपकरण | विकल्प | परियोजनाएं और समाधान | बनाएं और चलाएं

ड्रॉप डाउन बदलें: "एमएसबिल्ड प्रोजेक्ट बिल्ड आउटपुट वर्बोजिटी" उच्च सेटिंग्स में से एक के लिए। यह डिफ़ॉल्ट रूप से न्यूनतम पर सेट है।

0

संक्षिप्त उत्तर हाँ है, आप उन्हें अलग-अलग फ़ाइलों में विभाजित कर सकते हैं।

5

MSDN Documentation से:

नाम स्थान कीवर्ड लिए किया जाता है एक गुंजाइश घोषणा करते हैं। यह नामस्थान स्कोप आपको कोड व्यवस्थित करने देता है और आपको वैश्विक स्तर पर अद्वितीय प्रकार बनाने के लिए तरीका देता है।

हाँ, नामस्थान कर सकते हैं (और आमतौर पर कर रहे हैं) कई कोड फ़ाइलों में विभाजित। उन नामस्थानों में कक्षाएं अलग-अलग संकलित की जाती हैं, लेकिन (आमतौर पर, अब के लिए बाहरी संसाधनों को छोड़कर) एक आउटपुट फ़ाइल (यानी एक exe या dll) में।

बहुत व्यापक अर्थ में, कपड़े धोने की तरह इसे सोचें। प्रत्येक "ढेर" (रंगों का ढेर, सफेद का ढेर इत्यादि) एक नामस्थान होगा। एक ढेर में कपड़ों का प्रत्येक टुकड़ा एक वर्ग या एक इंटरफ़ेस होगा।

आशा है कि एक छोटे से मदद करता है ...

+2

समानता का बेहतर संस्करण: ढेर स्वयं फाइलें हैं, लेकिन आपके पास गोरे के कई ढेर, रंगों के एकाधिक ढेर आदि हो सकते हैं, और वे प्रत्येक तरह के ढेर के साथ समूहित होते हैं। ... हालांकि मैं भूल जाता हूं कि सी # को प्रति फ़ाइल एक वर्ग की आवश्यकता है जैसे कि जावा करता है। – JAB

+0

आप एक से अधिक कक्षाओं को एक फ़ाइल में डाल सकते हैं (हालांकि यह रखरखाव को और अधिक कठिन बनाता है यदि आप उस फ़ाइल में किसी क्लास की तलाश में हैं जो उस वर्ग के नाम पर नहीं है)। आप आंशिक कक्षाओं का उपयोग करके एक ही कक्षा को कई फाइलों में विभाजित कर सकते हैं (यह डिफ़ॉल्ट रूप से किया जाता है, कहें, डब्ल्यूपीएफ विंडो कक्षाएं, जीयूआई प्रारंभिक गोंद कोड छुपाएं)। –

2

हाँ, आप एक से अधिक फ़ाइलों में एक ही नाम स्थान का उपयोग कर सकते हैं।

सबसे सुलभ उदाहरण: विजुअल स्टूडियो में, अपनी प्रोजेक्ट बनाने के बाद, आप उस प्रोजेक्ट में और फाइलें बना सकते हैं। प्रोजेक्ट के लिए एक सेटिंग है जो डिफ़ॉल्ट फाइलस्पेस को नई फाइलों को असाइन करने के लिए है। आपकी परियोजना को एक एकल डीएल/एक्सई के रूप में संकलित किया जाएगा।

आप मौजूदा नामस्थानों का भी उपयोग कर सकते हैं जैसे System। आपकी सिस्टम कक्षा आपकी असेंबली में होगी। सिस्टम सामग्री वाले .NET की मुख्य असेंबली को आपके अतिरिक्त शामिल करने के लिए पुन: संकलित नहीं किया जाएगा। हालांकि, आपको अभी भी अपनी नई System.x कक्षा का उपयोग करने के लिए कक्षाओं के शीर्ष पर केवल 1 using System कथन की आवश्यकता होगी।

नोट: मैं आपके सभी कोड को सिस्टम में डालने की वकालत नहीं कर रहा हूं ताकि आप बाद में कथन का उपयोग करने से बच सकें। ऐसा करने के बहुत मजबूत कारण हैं लेकिन मूल प्रश्न का उत्तर देने के प्रयोजनों के लिए यह अधिक है।

0

दोनों को 1 नामस्थान, Contacts में संकलित किया गया है। यह सामान्य है कि आपके पास एकाधिक फ़ाइलें और एकल नामस्थान है।

एक नाम स्थान बस अपनी कक्षाओं के चारों ओर एक आवरण किसी तरह का है। उदाहरण के लिए, अब आपके पास Sentence नाम के साथ कई कक्षाएं हो सकती हैं। आप नाम स्थान Jail और एक नाम स्थान Linguistics में में एक वाक्य बना सकते हैं।

इस तरह आपके पास 1 कक्षा का नाम, Jail.Sentence और Linguistics.Sentence का 2 प्रस्तुतियां होंगी। दोनों के पास एक अलग शरीर भी है।

मैं अपने नामस्थान का उपयोग कोड थोड़ा 'का आयोजन' के लिए। मेरी इंटरफेस के सभी Projectname.Contracts में मौजूद हैं और मेरे सामान्य कोड Projectname

में यह विकिपीडिया पृष्ठ भी उपयोगी है: Wiki

0

हाँ, आप एक नाम स्थान के साथ फ़ाइलें और यहां तक ​​कि विधानसभाओं अवधि कर सकते हैं। यहां एक और चाल है:

विजुअल स्टूडियो में, यदि आप समाधान एक्सप्लोरर पर जाते हैं और अपने csharp प्रोजेक्ट के नीचे एक फ़ोल्डर बनाते हैं, तो उस फ़ोल्डर का नाम डिफ़ॉल्ट रूप से फ़ोल्डर में बनाए गए किसी भी फ़ाइल के लिए नेमस्पेस में जोड़ा जाएगा।

उदाहरण:

  1. एक नया csharep परियोजना बनाएँ। परियोजना पर
  2. राइट क्लिक करें, और चुनें गुण
  3. सेट डिफ़ॉल्ट नाम स्थान (गुण संवाद) करने के लिए "MyProject"
  4. ठीक
  5. अब अपनी परियोजना में एक नया वर्ग पैदा करते हैं।
  6. सूचना उस वर्ग के नाम स्थान "MyProject"
  7. है अब, अपनी परियोजना राइट क्लिक करें और "ASubNamespace" नाम का फ़ोल्डर बनाने
  8. अब राइट क्लिक करें कि फ़ोल्डर और जोड़ने का चयन | वर्ग
  9. सूचना है कि अपने नए वर्ग MyProject.ASubNamespace नाम स्थान में है!
0

यदि आप इसे विभिन्न फ़ाइलों में विभाजित नहीं कर रहे हैं, तो संभवतः आप अपने नामस्थान लेआउट में अत्यधिक ठीक हैं।

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

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