Quelle est la différence (en termes d'utilisation) entre les espaces de noms en C # et les packages en Java?
De: http://www.javacamp.org/javavscsharp/namespace.html
Les packages sont utilisés pour organiser les fichiers ou les types publics afin d'éviter les conflits de types. Les constructions de package peuvent être mappées à 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 packages. Vous devez utiliser une instruction d'importation ou un nom complet pour 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 {}
Le package ne peut pas être imbriqué. Un fichier source ne peut avoir qu'une seule instruction de package.
Les espaces de noms sont utilisés pour organiser les programmes, à la fois en tant que système d'organisation "interne" pour un programme et en tant que système d'organisation "externe".
System.Security.Cryptography.AsymmetricAlgorithm aa;
peut être remplacé:
using System.Security.Crypography;
AsymmetricAlgorithm aa;
Alternativement, on pourrait spécifier un alias pour l'espace de noms, par exemple
using myAlias = System.Security.Crypography;
puis référez-vous à la classe avec
myAlias.AsymmetricAlgorithm
namespace N1.N2
{
class A {}
class B {}
}
ou
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
import system.security.crypography.AsymmetricAlgorithm;
. Depuis java, vous devez importer une classe, pas un package. Il est possible d'importer toutes les classes dans un package avec unimport package.*
mais cela aussi importe les classes, pas le package.namespace
mot clé en Java serait bien.Il y a quelques détails qui diffèrent.
En Java, la structure des 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 une accessibilité par défaut / package. L'accessibilité interne C # va dans les assemblys.
Si vous utilisez VS et Eclipse et que vous les laissez structurer le projet, vous ne ressentirez pas beaucoup les différences.
la source
Il n'y a pas de terme tel que «espace de noms» en Java - un package agit comme un espace de noms en Java, en termes de fourniture d'une portée pour les noms. Cela fait également partie du modèle d'accessibilité.
De la section 7 de la spécification du langage Java :
EDIT: D'accord, après la clarification: un package Java est similaire à un espace de noms C # - sauf qu'il a un impact sur l'accessibilité, alors qu'en C # les espaces de noms et l'accessibilité sont entièrement orthogonaux.
la source
En C ++ / C #, les espaces de noms sont simplement utilisés pour partitionner les 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 - les packages sont utilisés pour les modules, l'aspect de dénomination n'en est qu'une partie.
la source
En java, vous pouvez appliquer divers spécificateurs d'accès aux classes qui auront un impact sur vos packages.
protected: accessible au même package et à ses sous-classes dans un autre package, par défaut: accessible au même package, public: universellement accessible, private: même pas accessible par le même package.
Ces types de spécificateurs d'accès ne s'appliquent pas à l'espace de noms dans c sharp
la source
Un espace de noms est comme un nouveau dossier, tous les sous-dossiers sont des sous-espaces de noms. Si nous considérons un espace de noms comme une fonction comme nous avons un espace de noms publicitaire sous l'espace de noms marketing, nous utilisons marketing.advertising.adsclass.adsmethod. Très facile à résoudre un problème. Java a la même méthode via package mais complexe pour les nouveaux arrivants.
En C #
'' 'marketing d'espace de noms {
}
À utiliser en classe client
'' 'En java, vous utilisez la même méthode. Vous regroupez plusieurs classes dans un seul package et vous l'utilisez plusieurs fois. Cela augmente l'unicité. Vous écrivez une fois et utilisez plusieurs fois. Classes associées dans un seul package. Pas besoin de coder plusieurs fois.
la source