2009-04-06 15 views
42

मेरे पास एक क्लास लाइब्रेरी है जिसमें कुछ नामस्थान हैं जिनमें केवल आंतरिक प्रकार हैं।कक्षा पुस्तकालय में केवल आंतरिक प्रकार वाले नामस्थानों को छुपाएं?

हालांकि, किसी एप्लिकेशन प्रोजेक्ट में क्लास लाइब्रेरी का उपयोग करते समय, नामस्थान इंटेलिजेंस में दिखाई देते हैं, लेकिन निश्चित रूप से वे खाली हैं। क्या अन्य परियोजनाओं में इंटेलिजेंस का उपयोग करते समय नामस्थानों को पूरी तरह छिपाने का कोई तरीका है?

मैंने सभी आंतरिक कक्षाओं में EditorBrowsableAttribute लागू करने का प्रयास किया है, लेकिन मैं जो करना चाहता हूं वह नामस्थान पर लागू करना होगा, जो कि बिल्कुल असंभव है।

या, यदि मैं इसके बारे में पर्याप्त परवाह करता हूं, तो मुझे केवल एक प्रकार का नाम बदलना होगा जिसमें सार्वजनिक प्रकार शामिल हैं?

+1

यह Google के लिए बहुत कठिन था ... सब कुछ उन लोगों के लिए आ रहा था जो नामस्थान या असेंबली के अंदर कक्षा छिपाना चाहते थे। – Panzercrisis

उत्तर

43

यह कैसे आप अपने वर्ग पुस्तकालय को संदर्भित कर रहे हैं पर निर्भर करता है:

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

इस प्रयास करें:

namespace ClassLibrary1 
{ 
    namespace Internal 
    { 
     internal class InternalClass 
     { 
      public int internalStuff { get; set; } 
     } 
    } 

    namespace Public 
    { 
     public class PublicClass 
     { 
      public int publicStuff { get; set; } 
     } 
    } 
} 

आप एक परियोजना संदर्भ के माध्यम से इस संदर्भ हैं, तो आप खाली नाम स्थान देखेंगे। यदि आप इसका एक डीएल संदर्भित करते हैं, तो आप नहीं करेंगे।

+0

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

5

मैं पहले इसके खिलाफ आया हूं और कोई समाधान नहीं मिला है, केवल एक कामकाज जो आपके प्रोजेक्ट में काम कर सकता है या नहीं। नामस्थान को परिभाषित करने के बजाय आप एक नेस्टेड स्थैतिक वर्ग का उपयोग कर सकते हैं?

+0

हाँ, मैं ऐसा कर सकता था, लेकिन फिर मुझे सभी संदर्भों को फिर से शुरू करने की आवश्यकता होगी, क्योंकि नेस्टेड कक्षाओं को पूरे स्थान पर योग्यता नाम का हिस्सा बनने की आवश्यकता होगी। अर्थात। मुझे यह लिखना होगा: var x = new NotReallyANamespace.ClassName(); केवल उपयोग निर्देश जोड़ने के बजाय। विचार के लिए +1 हालांकि :) –

+0

मुझे पता है, यह सही से एक लंबा रास्ता है :( –

+2

अब सी # स्थिर 'का उपयोग कर रहा है, नेस्टेड स्थैतिक वर्ग दृष्टिकोण कुछ और व्यवहार्य हो गया है। – stakx

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