102 votes

Différence entre les espaces de noms en C # et les packages en Java

Quelle est la différence (en termes d'utilisation) entre les espaces de noms en C # et les packages en Java?

76voto

Aziz Yılmaz Points 274

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


Java

Les paquets sont utilisés pour organiser les fichiers ou les types publics pour éviter le type de conflits. Package constructions peuvent être mappés à un système de fichiers.

System.Security.Cryptography.AsymmetricAlgorithm aa;

peut être remplacé:

import System.Security.Crypography; 
class xxx { ...
AsymmetricAlgorithm aa;

Il n'y a pas d'alias pour les paquets. Vous devez utiliser l'instruction d'importation ou nom pleinement qualifié de mentionner le type spécifique.

package N1.N2;
    class A {}
    class B {}

ou

package N1.N2;
   class A {}

Un autre fichier source:

package N1.N2;
   class B {}

Package ne peut pas être imbriqués. Un fichier source ne peut avoir qu'un paquet de déclaration.

C#

Les espaces de noms sont utilisés pour organiser les programmes, à la fois comme un "interne" système d'organisation d'un programme, et comme un "externe" de l'organisation du système.

System.Security.Cryptography.AsymmetricAlgorithm aa;

peut être remplacé:

using System.Security.Crypography; 
AsymmetricAlgorithm aa;

Alternativement, on peut spécifier un alias pour l'espace de noms, par exemple

using myAlias = System.Security.Crypography; 

et puis reportez-vous à la classe avec

myAlias.AsymmetricAlgorithm 

namespace N1.N2
{
    class A {}
    class B {}
}

ou

namespace N1
{
    namespace N2
    {
        class A {}
        class B {}
    }
}

44voto

Acaz Souza Points 2502

Il y a quelques détails qui diffèrent.

En Java, la structure de répertoires doit correspondre à la structure du package. Aucune restriction de ce type en C #.

En C #, vous pouvez avoir plusieurs espaces de noms dans un seul fichier. En Java, un fichier appartient à un package (voir ci-dessus).

Java a l'accessibilité par défaut / package. L'accessibilité interne C # va dans les assemblées.

Si vous utilisez VS et Eclipse et les laissez structurer le projet, vous ne sentirez pas beaucoup les différences.

37voto

Jon Skeet Points 692016

Il n'y a pas de terme comme "espace de noms" en Java - package agit comme un espace de nommage en Java si, en termes de portée pour les noms. C'est aussi une partie de l'accessibilité modèle.

De l'article 7 de la Java Language Specification:

Les programmes sont organisés comme des ensembles de paquets. Chaque paquet a son propre ensemble de noms pour les types, ce qui contribue à éviter les conflits de nom. Un haut niveau de type est accessible (§6.6) à l'extérieur de l'emballage qui déclare que si le type est déclaré en public.

EDIT: Bon, après la clarification: un package Java est semblable à un namespace C# - sauf qu'il a un impact sur l'accessibilité, alors qu'en C# les espaces de noms et d'accessibilité sont entièrement orthogonale.

14voto

kba Points 10874

En C ++ / C #, les espaces de noms sont simplement utilisés pour le partitionnement des noms afin d'éviter les collisions en utilisant accidentellement le même nom pour une variable à différents endroits.

En Java, les packages sont bien plus que cela: des packages sont utilisés pour les modules, le nommage n’en est qu’une partie.

0voto

dasumohan89 Points 28

En Java, vous pouvez appliquer divers spécificateurs d'accès aux classes qui auront un impact sur vos paquets.

protected: accessible au même package et à ses sous-classes dans un autre package, par défaut: accessible au même package, public: accessible universellement, private: pas même accessible par le même package.

Ces types de spécificateurs d'accès ne sont pas applicables aux espaces de noms dans c sharp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X