2009-04-06 8 views
42

Mam biblioteki klas, które ma kilka przestrzeni nazw zawierających tylko typy wewnętrzne.Ukrywanie przestrzeni nazw zawierających tylko typy wewnętrzne w bibliotece klas?

Jednak w przypadku korzystania z biblioteki klas w projekcie aplikacji przestrzenie nazw pojawiają się w systemie intellisense, ale oczywiście są puste. Czy jest jakiś sposób, aby całkowicie ukryć przestrzenie nazw podczas korzystania z intellisense w innych projektach?

Próbowałem również zastosować EditorBrowsableAttribute do wszystkich klas wewnętrznych, ale chciałbym zastosować to do przestrzeni nazw, co oczywiście jest niemożliwe.

Czy jest, jeśli dbam o to wystarczająco dużo, jedyną opcją, którą muszę po prostu przenieść typy do przestrzeni nazw zawierającej typy publiczne?

+1

To było trochę trudne dla Google'a ... Nadchodziły wszystkie osoby, które chciały ukryć klasę wewnątrz przestrzeni nazw lub zespołu. – Panzercrisis

Odpowiedz

43

To zależy od tego, jak jesteś Twego biblioteki klas:

  • Jeśli masz projekt biblioteki zawarte w klasie rozwiązania i korzystać odwołanie projektu, będziesz zawsze zobaczyć tę pustą przestrzeń nazw pośrednictwem IntelliSense.
  • Jeśli odwołujesz się do skompilowanej biblioteki dll biblioteki klas, nie zobaczysz przestrzeni nazw wyświetlanej w systemie intellisense, o ile zawiera ona tylko wewnętrzne elementy.

Spróbuj tego:

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

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

Jeśli odwołać to poprzez odniesienie projektu, zobaczysz pustą przestrzeń nazw. Jeśli odwołasz się do dll tego, nie zrobisz tego.

+0

Zanim przeczytałem tę odpowiedź, zacząłem organizuj zestawy klas i rzeczy w podfoldery zachowując je w głównym obszarze nazw projektu, ale to naprawdę nie było w porządku.Mogę z pewnością żyć z nimi tylko będąc widocznymi z odniesieniami do projektu, więc teraz zacznę dodawać pod-przestrzeni nazw w. – Panzercrisis

5

Przeciwstawiłem się temu wcześniej i nie znalazłem rozwiązania, tylko obejście, które może, ale nie musi działać w twoim projekcie. Zamiast definiować przestrzeń nazw, możesz użyć zagnieżdżonej klasy statycznej?

+0

Tak, mógłbym to zrobić, ale wtedy musiałbym zmienić wszystkie odniesienia, ponieważ klasy zagnieżdżone będą musiały być częścią kwalifikacyjnej nazwy w każdym miejscu. to znaczy. Musiałbym napisać to: var x = new NotReallyANamespace.ClassName(); zamiast tylko dodawać dyrektywę using. +1 dla pomysłu :) –

+0

Wiem, to daleko od ideału :( –

+2

Teraz, gdy C# ma 'używanie statycznego', metoda zagnieżdżonej klasy statycznej stała się nieco bardziej realna – stakx