2012-02-12 8 views

Respuesta

55

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


Java

paquetes se utilizan para organizar los archivos o tipos de públicos para evitar conflictos de tipos. Las construcciones de paquetes se pueden asignar a un sistema de archivos.

system.security.cryptography.AsymmetricAlgorithm aa; 

puede ser sustituida:

import system.security.Crypography; 
class xxx { ... 
AsymmetricAlgorithm aa; 

No hay alias de paquetes. Debe usar instrucción de importación o nombre completo para mencionar el tipo específico.

package n1.n2; 
    class A {} 
    class B {} 

o

package n1.n2; 
    class A {} 

Otro archivo de origen:

package n1.n2; 
    class B {} 

paquete no se pueden anidar. Un archivo fuente solo puede tener una declaración de paquete.

C#

espacios de nombres se utilizan para organizar los programas, tanto como un sistema "interno" organización de un programa, y ​​como un sistema de organización "externa".

System.Security.Cryptography.AsymmetricAlgorithm aa; 

puede ser sustituida:

using System.Security.Crypography; 
AsymmetricAlgorithm aa; 

Alternativamente, se podría especificar un alias para el espacio de nombres, por ejemplo

using myAlias = System.Security.Crypography; 

y luego se refieren a la clase con

myAlias.AsymmetricAlgorithm 

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

o

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

No existe un término como "espacio de nombre" en Java; un paquete actúa como como un espacio de nombres en Java, en términos de proporcionar un alcance para los nombres. También es parte del modelo de accesibilidad.

De section 7 of the Java Language Specification:

programas se organizan como conjuntos de paquetes. Cada paquete tiene su propio conjunto de nombres para los tipos, lo que ayuda a evitar conflictos de nombres. Se puede acceder a un tipo de nivel superior (§6.6) fuera del paquete que lo declara solo si el tipo se declara público.

EDIT: Bueno, después de la aclaración: un paquete Java es similares a un espacio de nombres de C# - excepto que tiene un impacto en la accesibilidad, mientras que en C# espacios de nombres y la accesibilidad son totalmente ortogonales.

+1

quiero decir para referirse al espacio de nombres en C#, por supuesto! – Mazzy

11

En C++/C#, los espacios de nombres solo se utilizan para particionar nombres para evitar colisiones al usar accidentalmente el mismo nombre para una variable en diferentes lugares.

En Java, los paquetes son mucho más que eso: los paquetes se usan para los módulos, el aspecto de los nombres es solo una parte.

36

Hay algunos detalles que difieren.

En Java, la estructura del directorio debe coincidir con la estructura del paquete. No dicha restricción en C#.

En C# puede tener varios espacios de nombres en un archivo. En Java, un archivo pertenece a un paquete (ver anterior).

Java tiene acceso por defecto/paquete. La accesibilidad interna de C# va de en ensamblajes.

Si usa VS y Eclipse y les permite estructurar el proyecto, entonces no sentirá las diferencias mucho.

0

En java puede aplicar varios especificadores de acceso a las clases que tendrán un impacto en sus paquetes.

protegida: accesible a mismo paquete y sus subclases en otro paquete, defecto: accesible a mismo paquete, pública: universalmente accesible, privada: ni siquiera puede acceder en el mismo paquete.

Este tipo de especificadores de acceso no son aplicables a espacio de nombre en do sostenido

Cuestiones relacionadas