2009-04-06 10 views
42

Ich habe eine Klassenbibliothek mit ein paar Namespaces, die nur interne Typen enthalten.Namespaces ausblenden, die nur interne Typen in einer Klassenbibliothek enthalten?

Wenn Sie jedoch die Klassenbibliothek in einem Anwendungsprojekt verwenden, werden die Namespaces in IntelliSense angezeigt, aber sie sind natürlich leer. Gibt es eine Möglichkeit für mich, die Namespaces vollständig zu verstecken, wenn ich Intellisense in anderen Projekten verwende?

Ich habe versucht, EditorBrowsableAttribute auch auf alle internen Klassen anzuwenden, aber was ich tun möchte, wäre, das auf den Namespace anzuwenden, was natürlich unmöglich ist.

Oder ist, wenn ich mich genug darum kümmere, die einzige Option, die ich nur die Typen in einen Namespace verschieben, der öffentliche Typen enthält?

+1

Das war irgendwie schwer zu googeln ... für Leute, die eine Klasse in einem Namespace oder einer Assembly verstecken wollten, kam immer alles auf. – Panzercrisis

Antwort

43

Es hängt davon ab, wie Sie Ihre Klassenbibliothek sind Referenzierung:

  • Wenn Sie das Klassenbibliotheksprojekt in Ihrer Lösung enthalten sind, und einen Projektverweis verwenden, können Sie immer, dass die leeren Namensraum über Intellisense sehen werden.
  • Wenn Sie eine kompilierte DLL Ihrer Klassenbibliothek referenzieren, wird der Namespace nicht in intellisense angezeigt, sofern er nur interne Member enthält.

Try this:

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

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

Wenn Sie dies über einen Projektverweis verweisen, werden Sie den leeren Namensraum sehen. Wenn Sie eine DLL davon referenzieren, werden Sie nicht.

+0

Bevor ich diese Antwort gelesen habe, fing ich an Organisiere Gruppen von Klassen und Sachen in Unterordner und behalte sie im Root-Namespace des Projekts, aber das hat sich wirklich nicht richtig angefühlt Ich kann definitiv damit leben, dass sie nur mit Projektreferenzen sichtbar sind, also fange ich jetzt an hinzuzufügen die Unternamespaces in. – Panzercrisis

5

Ich bin schon einmal darauf gestoßen und habe keine Lösung gefunden, sondern nur einen Workaround, der in Ihrem Projekt funktionieren kann oder auch nicht. Anstatt einen Namespace zu definieren, könnten Sie eine geschachtelte statische Klasse verwenden.

+0

Ja, ich könnte das tun, aber dann müsste ich alle Referenzen neu verkabeln, da verschachtelte Klassen überall im qualifizierenden Namen enthalten sein müssen. dh. Ich müsste das schreiben: var x = new NotReallyANamespace.ClassName(); anstatt nur die using-Anweisung hinzuzufügen. +1 für die Idee, aber :) –

+0

Ich weiß, es ist ein langer Weg von perfekt :( –

+2

Nun, da C# statische verwendet hat, ist die verschachtelte statische Klasse Ansatz etwas mehr durchführbar. – stakx

Verwandte Themen