5 Stimmen

C# - Deklaration von Typen innerhalb eines Namensraumes

Was eine mögliche Verwendung der Deklaration von Typen innerhalb eines Namespaces, aber nicht in einer Klasse sein könnte.

Zum Beispiel:

namespace Test
{
    public delegate void Ispossible();
}

Dies ist gültig und erzeugt keine Kompilierungsfehler, aber ich kann nicht denken, warum wir es auf diese Weise im Gegensatz zu innerhalb einer Klasse deklarieren würde.

6voto

STW Punkte 42452

Ein Namespace ist eine übergeordnete Organisationseinheit in .NET.

Typen deklarieren innerhalb Klassen ist in der Regel verpönt (aber wie bei allen Dingen ist es keine 100%ige Regel), weil es die Typen enger koppeln und schwieriger zu finden machen kann.

VB.NET-Module sind eher eine Ausnahme ( bearbeiten (sie sind eigentlich eher ein Compiler-Trick/syntaktischer Zucker), aber normalerweise ist alles im .NET-Ökosystem in einem Namespace enthalten.

Ihr Beispiel bietet sich zur Wiederverwendung an; wäre es innerhalb einer Klasse, dann würde es bedeuten, dass der Delegat nur von dieser Klasse verwendet werden sollte und würde wahrscheinlich dazu führen, dass unnötigerweise doppelte Delegaten eingeführt werden.


Update: Wenn man nur mit einer Handvoll Typen arbeitet, scheinen Namespaces nicht sehr nützlich zu sein, aber ohne sie wäre ein Projekt jeder Größe eine organisatorische Katastrophe. Stellen Sie sich das .NET-Framework ohne Namespaces vor. Nach einer (wahrscheinlich längst veralteten) Zählung gibt es 3500 Typen im Framework.

Namensräume sind wie Ordner oder Schubladen für Dokumente; ein paar lose Papiere sind leicht zu verwalten, aber wenn Sie viele Seiten haben, wird es mühsam, die gewünschte Seite zu finden.

Lesen Sie die Dokumentation, sie ist kurz und nicht furchtbar kompliziert (Namespaces sind es auch nicht), hat aber ein paar gute Punkte MSDN - Namespace (c#)

4voto

Darin Dimitrov Punkte 990883

Wenn es sich um einen Mehrzweckdelegierten handelt, wie z.B. Func<TResult> , EventHandler die sich nicht auf eine bestimmte Klasse bezieht, sollten Sie sie direkt im Namespace deklarieren.

2voto

James Curran Punkte 98228

Ihre Formulierung ("was könnte ein möglicher Verwendungszweck für die Deklaration von Typen in einem Namensraum, aber nicht in einer Klasse sein") zeigt, dass Sie einen Unterschied zwischen "Typen" und "Klassen" machen. Es gibt keinen. Eine Klasse ist ein Typ.

Unter welchen Bedingungen würden Sie also eine Klasse direkt in einem Namespace deklarieren wollen (d.h. auf die Art und Weise, wie es am häufigsten gemacht wird)? Die gleichen Gründe gelten auch für andere Arten von Typen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X