I pode expor uma classe de outro namespace .net como uma classe no meu espaço para nome?
-
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?
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.