¿Cuál es la diferencia (en términos de uso) entre los espacios de nombres en C # y los paquetes en Java?
De: http://www.javacamp.org/javavscsharp/namespace.html
Los paquetes se utilizan para organizar archivos o tipos 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 reemplazado:
import system.security.Crypography;
class xxx { ...
AsymmetricAlgorithm aa;
No hay alias para los paquetes. Debe usar una declaración de importación o un nombre completo para mencionar el tipo específico.
package n1.n2;
class A {}
class B {}
o
package n1.n2;
class A {}
Otro archivo fuente:
package n1.n2;
class B {}
El paquete no se puede anidar. Un archivo fuente solo puede tener una declaración de paquete.
Los espacios de nombres se utilizan para organizar programas, como sistema de organización "interno" para un programa y como sistema de organización "externo".
System.Security.Cryptography.AsymmetricAlgorithm aa;
puede ser reemplazado:
using System.Security.Crypography;
AsymmetricAlgorithm aa;
Alternativamente, se podría especificar un alias para el espacio de nombres, p. Ej.
using myAlias = System.Security.Crypography;
y luego referirse a la clase con
myAlias.AsymmetricAlgorithm
namespace N1.N2
{
class A {}
class B {}
}
o
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
import system.security.crypography.AsymmetricAlgorithm;
. Dado que en Java tienes que importar una clase, no un paquete. Es posible importar todas las clases en un paquete con unimport package.*
pero eso también importa las clases, no el paquete.namespace
palabra clave en Java estaría bien.Hay algunos detalles que difieren.
En Java, la estructura del directorio debe coincidir con la estructura del paquete. No existe tal 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 accesibilidad predeterminada / paquete. La accesibilidad interna de C # se incluye en ensamblados.
Si usa VS y Eclipse y les permite estructurar el proyecto, no sentirá mucho las diferencias.
fuente
No existe un término como "espacio de nombres" en Java; sin embargo, un paquete actúa como un espacio de nombres en Java, en términos de proporcionar un ámbito para los nombres. También forma parte del modelo de accesibilidad.
De la sección 7 de la Especificación del lenguaje Java :
EDITAR: De acuerdo, después de la aclaración: un paquete de Java es similar a un espacio de nombres C #, excepto que tiene un impacto en la accesibilidad, mientras que en C # los espacios de nombres y la accesibilidad son completamente ortogonales.
fuente
En C ++ / C #, los espacios de nombres solo se usan 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 utilizan para módulos, el aspecto de la denominación es solo una parte.
fuente
En Java, puede aplicar varios especificadores de acceso a las clases que tendrán un impacto en sus paquetes.
protegido: accesible para el mismo paquete y sus subclases en otro paquete, predeterminado: accesible para el mismo paquete, público: universalmente accesible, privado: ni siquiera accesible por el mismo paquete.
Este tipo de especificadores de acceso no son aplicables al espacio de nombres en c sostenido
fuente
Un espacio de nombres es como una carpeta nueva, todas las subcarpetas son sub-espacios de nombres. Si consideramos un espacio de nombres como una función como si tuviéramos un espacio de nombres publicitario bajo el espacio de nombres de marketing, usamos marketing.advertising.adsclass.adsmethod. Muy fácil de resolver un problema. Java tiene el mismo método a través del paquete, pero es complejo para los recién llegados.
C ª#
'' 'marketing de espacio de nombres {
}
Para usar en clase de cliente
'' 'En Java usas el mismo método. Empaqueta varias clases en un paquete y lo usa muchas veces. Aumenta la singularidad. Escribes una vez y usas muchas veces. Clases relacionadas en un paquete. No es necesario codificar muchas veces.
fuente