it-swarm.com.de

Unterschied zwischen Namespace in C # und Paket in Java

Was ist der Unterschied (in Bezug auf die Verwendung) zwischen Namespaces in C # und Paketen in Java?

88
Mazzy

Von: http://www.javacamp.org/javavscsharp/namespace.html


Java

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 import-Anweisung 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 geschachtelt werden. Eine Quelldatei kann nur eine Paketanweisung enthalten.

C #

Namensräume werden verwendet, um Programme zu organisieren, 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 Namensraum 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 {}
    }
}
65

Es gibt einige Details, die sich unterscheiden.

In Java sollte die Verzeichnisstruktur mit der Paketstruktur übereinstimmen. Nein. __ solche Einschränkung in C #.

In C # können Sie mehrere Namespaces in einer Datei enthalten. In Java gehört eine Datei Zu einem Paket (siehe vorheriges).

Java verfügt über Standard-/Paketzugänglichkeit. C # -interne Erreichbarkeit geht in Assemblys.

Wenn Sie VS und Eclipse verwenden und das Projekt strukturieren lassen, werden Sie die Unterschiede kaum spüren.

39
Acaz Souza

In Java gibt es keinen Begriff wie "Namespace" - ein Paket Acts jedoch als Namespace in Java, um einen Namensraum zu schaffen. Es ist auch Teil des Zugänglichkeitsmodells.

Ab Abschnitt 7 der Java-Sprachspezifikation :

Die Programme sind in Paketen zusammengefasst. Jedes Paket hat einen eigenen Satz von Namen für Typen, wodurch Namenskonflikte vermieden werden. Auf einen Typ der obersten Ebene (§6.6) kann außerhalb des Pakets zugegriffen werden, der es nur deklariert, wenn der Typ als öffentlich deklariert ist.

BEARBEITEN: Okay, nach der Klarstellung: Ein Java-Paket ist ahnlich zu einem C # -Namensraum - mit der Ausnahme, dass es die Zugänglichkeit beeinflusst, wohingegen in C # -Namensräumen und die Zugänglichkeit vollständig orthogonal ist.

31
Jon Skeet

In C++/C # werden Namespaces nur zur Partitionierung 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.

11
kba

In Java können Sie verschiedene Zugriffspezifizierer auf Klassen anwenden, die Auswirkungen auf Ihre Pakete haben.

protected: zugänglich für dasselbe Paket und seine Unterklassen in einem anderen Paket.... default: zugänglich für dasselbe Paket.... public: universell zugänglich.... privat: nicht einmal für dasselbe Paket zugänglich.

Diese Art von Zugriffsspezifizierern gilt nicht für Namespaces in cis

0
dasumohan89