Was ist der Unterschied (in Bezug auf die Verwendung) zwischen Namespaces in C # und Paketen in Java?
Von: http://www.javacamp.org/javavscsharp/namespace.html
Pakete werden zum Organisieren von Dateien oder öffentlichen Typen verwendet, um Typkonflikte zu vermeiden. Paketkonstrukte können einem Dateisystem zugeordnet werden.
system.security.cryptography.AsymmetricAlgorithm aa;
kann ersetzt werden:
import system.security.Crypography;
class xxx { ...
AsymmetricAlgorithm aa;
Es gibt keinen Alias für Pakete. Sie müssen eine Importanweisung oder einen vollständig qualifizierten Namen verwenden, um den spezifischen Typ anzugeben.
package n1.n2;
class A {}
class B {}
oder
package n1.n2;
class A {}
Eine andere Quelldatei:
package n1.n2;
class B {}
Paket kann nicht verschachtelt werden. Eine Quelldatei kann nur eine Paketanweisung enthalten.
Namespaces werden zum Organisieren von Programmen verwendet, sowohl als "internes" Organisationssystem für ein Programm als auch als "externes" Organisationssystem.
System.Security.Cryptography.AsymmetricAlgorithm aa;
kann ersetzt werden:
using System.Security.Crypography;
AsymmetricAlgorithm aa;
Alternativ könnte man einen Alias für den Namespace angeben, z
using myAlias = System.Security.Crypography;
und beziehen Sie sich dann auf die Klasse mit
myAlias.AsymmetricAlgorithm
namespace N1.N2
{
class A {}
class B {}
}
oder
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
import system.security.crypography.AsymmetricAlgorithm;
. Da Sie in Java eine Klasse importieren müssen, kein Paket. Es ist möglich, alle Klassen in einem Paket mit einemimport package.*
zu importieren, aber auch das importiert die Klassen, nicht das Paket.namespace
Schlüsselwort in Java wäre schön.Es gibt einige Details, die sich unterscheiden.
In Java sollte die Verzeichnisstruktur mit der Paketstruktur übereinstimmen. Keine solche Einschränkung in C #.
In C # können Sie mehrere Namespaces in einer Datei haben. In Java gehört eine Datei zu einem Paket (siehe oben).
Java hat Standard- / Paketzugriff. Die interne Barrierefreiheit von C # erfolgt in Baugruppen.
Wenn Sie VS und Eclipse verwenden und das Projekt strukturieren lassen, werden Sie die Unterschiede nicht viel spüren.
quelle
In Java gibt es keinen Begriff wie "Namespace" - ein Paket fungiert jedoch in Java als Namespace, um einen Bereich für Namen bereitzustellen. Es ist auch Teil des Barrierefreiheitsmodells.
Aus Abschnitt 7 der Java-Sprachspezifikation :
EDIT: Okay, nach der Klarstellung: Ein Java-Paket ähnelt einem C # -Namensraum - mit der Ausnahme, dass es sich auf die Barrierefreiheit auswirkt, während in C # -Namensräumen und die Barrierefreiheit vollständig orthogonal sind.
quelle
In C ++ / C # werden Namespaces nur zum Partitionieren von Namen verwendet, um Kollisionen zu vermeiden, indem versehentlich derselbe Name für eine Variable an verschiedenen Stellen verwendet wird.
In Java sind Pakete weit mehr als nur das - Pakete werden für Module verwendet, der Namensaspekt ist nur ein Teil davon.
quelle
In Java können Sie verschiedene Zugriffsspezifizierer auf Klassen anwenden, die sich auf Ihre Pakete auswirken.
protected: Zugriff auf dasselbe Paket und seine Unterklassen in einem anderen Paket, Standard: Zugriff auf dasselbe Paket, public: universell zugänglich, privat: nicht einmal für dasselbe Paket zugänglich.
Diese Art von Zugriffsspezifizierern gilt nicht für Namespace in cis
quelle
Ein Namespace ist wie ein neuer Ordner. Alle Unterordner sind Unter-Namespaces. Wenn wir einen Namespace als eine Funktion betrachten, wie wir eine Namespace-Werbung unter Marketing-Namespace haben, verwenden wir marketing.advertising.adsclass.adsmethod. Sehr einfach, ein Problem zu lösen. Java hat die gleiche Methode per Paket, ist aber für Neuankömmlinge komplex.
In C #
'' 'Namespace-Marketing {
}}
Zur Verwendung in der Client-Klasse
'' 'In Java verwenden Sie die gleiche Methode. Sie packen mehrere Klassen in ein Paket und verwenden es mehrmals. Es erhöht die Einzigartigkeit. Sie schreiben einmal und verwenden viele Male. Verwandte Klassen in einem Paket. Sie müssen nicht oft codieren.
quelle