Qual é a diferença (em termos de uso) entre namespaces em C # e pacotes em Java?
De: http://www.javacamp.org/javavscsharp/namespace.html
Os pacotes são usados para organizar arquivos ou tipos públicos para evitar conflitos de tipo. As construções de pacote podem ser mapeadas para um sistema de arquivos.
system.security.cryptography.AsymmetricAlgorithm aa;
pode ser substituído:
import system.security.Crypography;
class xxx { ...
AsymmetricAlgorithm aa;
Não há alias para pacotes. Você deve usar a instrução import ou um nome totalmente qualificado para mencionar o tipo específico.
package n1.n2;
class A {}
class B {}
ou
package n1.n2;
class A {}
Outro arquivo de origem:
package n1.n2;
class B {}
O pacote não pode ser aninhado. Um arquivo de origem pode ter apenas uma instrução de pacote.
Os namespaces são usados para organizar programas, tanto como um sistema de organização "interno" para um programa e como um sistema de organização "externo".
System.Security.Cryptography.AsymmetricAlgorithm aa;
pode ser substituído:
using System.Security.Crypography;
AsymmetricAlgorithm aa;
Como alternativa, pode-se especificar um alias para o namespace, por exemplo
using myAlias = System.Security.Crypography;
e, em seguida, consulte a aula com
myAlias.AsymmetricAlgorithm
namespace N1.N2
{
class A {}
class B {}
}
ou
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
import system.security.crypography.AsymmetricAlgorithm;
. Já que em java você tem que importar uma classe, não um pacote. É possível importar todas as classes em um pacote com um,import package.*
mas isso também importa as classes, não o pacote.namespace
palavra-chave em Java seria bom.Existem alguns detalhes que diferem.
Em Java, a estrutura do diretório deve corresponder à estrutura do pacote. Essa restrição não existe em C #.
Em C #, você pode ter vários namespaces em um arquivo. Em Java, um arquivo pertence a um pacote (ver anterior).
Java tem acessibilidade padrão / pacote. Acessibilidade interna C # vai em assemblies.
Se você usar VS e Eclipse e deixá-los estruturar o projeto, não sentirá muito as diferenças.
fonte
Não existe um termo como "namespace" em Java - um pacote atua como um namespace em Java, no entanto, em termos de fornecer um escopo para nomes. Também faz parte do modelo de acessibilidade.
Da seção 7 da Especificação da linguagem Java :
EDIT: Ok, após o esclarecimento: um pacote Java é semelhante a um namespace C # - exceto que tem um impacto na acessibilidade, enquanto em C # namespaces e acessibilidade são inteiramente ortogonais.
fonte
Em C ++ / C #, os namespaces são usados apenas para nomes de particionamento para evitar colisões ao usar acidentalmente o mesmo nome para uma variável em locais diferentes.
Em Java, os pacotes são muito mais do que apenas isso - os pacotes são usados para módulos, o aspecto de nomenclatura é apenas uma parte dele.
fonte
Em java, você pode aplicar vários especificadores de acesso a classes que terão impacto em seus pacotes.
protegido: acessível ao mesmo pacote e às suas subclasses em outro pacote, padrão: acessível ao mesmo pacote, público: universalmente acessível, privado: nem mesmo acessível pelo mesmo pacote.
Este tipo de especificadores de acesso não são aplicáveis ao namespace em c sharp
fonte
Um namespace é como uma nova pasta, todas as subpastas são sub-namespaces. Se considerarmos um namespace como uma função, como se tivéssemos um namespace anunciando sob o namespace de marketing, usaremos marketing.advertising.adsclass.adsmethod. Muito fácil de resolver um problema. Java tem o mesmo método via pacote, mas complexo para iniciantes.
Em C #
'' 'marketing de namespace {
}
Para usar na classe cliente
'' 'Em java você usa o mesmo método. Você empacota várias classes em um pacote e o usa muitas vezes. Aumenta a singularidade. Você escreve uma vez e usa muitas vezes. Classes relacionadas em um pacote. Não há necessidade de codificar muitas vezes.
fonte