I pode expor uma classe de outro namespace .net como uma classe no meu espaço para nome?

StackOverflow https://stackoverflow.com/questions/138638

  •  02-07-2019
  •  | 
  •  

Pergunta

Posso expor uma classe de outro namespace .net como uma classe no meu espaço para nome? Eu uso uma classe - antlr.collections.AST - como o tipo de retorno para uma função que pertence a uma classe no meu espaço de nomes; como resultado, o usuário tem que ter

using antlr.collections;
using myNamespace;

no topo de seus arquivos, a fim de usar a minha função. Posso fazer myNamespace.AST um alias para antlr.collections.AST, de modo que o usuário só tem que ter

using myNamespace;

no topo de seus arquivos?

Foi útil?

Solução

Tenha em mente que os consumidores de seu código não vai realmente necessidade para ter o uso de declarações. Aqueles estão lá para facilitar suas vidas, para que eles não tem que digitar antlr.collections.Foo e antlr.collections.Bar toda a sua fonte.

O "impacto" maior (se é que há realmente uma grave) é que o consumidor do seu código terá uma referência difícil a montagem onde antlr.collections está definida.

No entanto, se isso está documentado na frente, eu sinceramente não vejo isso sendo tão grande de um problema. Não é diferente do que o consumidor de uma DAL SubSonic gerado precisando referências tanto para o DAL gerado montagem e da montagem SubSonic originais. (E, muito possivelmente, usando instruções também.)

As dependências são o que são. Há uma razão para as classes são divididas em namespaces - principalmente para a organização e para reduzir conflitos de nomes. Sem saber o que as classes estão no namespace você menciona, eu não sei quão provável tal conflito a verdade está em seu cenário ... Mas tentar mover a classe de um namespace para outro, ou para esconder o fato de que tal é necessário derivando uma classe em branco a partir dele, provavelmente não é a melhor idéia. Não vai matar os consumidores de sua classe para ter outra referência e usando comunicado.

Outras dicas

Como sobre a derivação de uma classe com o mesmo nome no novo namespace? Eu quis dizer:

namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}

criar uma nova classe que herda a classe em seu novo namespace. Não é o ideal, mas é útil para testes de unidade e similares.

Você deve pensar sobre por que você está fazendo isso, porém, as aulas são divididos em namespaces por uma razão.

Não, você não pode.

O caminho completo eo nome de uma classe é parte de sua identidade.

Se você derivar da classe e retornar sua classe derivada, você vai fazer-se responsável por fornecer toda a documentação para o tipo de retorno.

Eu acho que você vai estar fazendo os desenvolvedores que usam a biblioteca um desserviço, porque eles não serão necessariamente saber que o que eles estão realmente trabalhando com é um tipo de antir.collections (não que eu mesmo sei o que é isso, Mas esse não é o ponto). Se o desenvolvedor trata de StackOverflow.com procura de informações sobre que tipo de retorno, eles são mais propensos a encontrar informações se o tipo é de uma biblioteca "comum", ou da sua?

A única solução é para esconder toda a dependência com o tipo antlr.collections.AST.

Você pode usar um Adapter fot esse fim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top