Pergunta

Existem algumas estabelecida nomear ou convenções de codificação para a definição de namespace ou tipo aliases em C #?

Para quem não sabe, a linguagem C # tem um recurso onde aliases podem ser definidos locais para um arquivo para namespaces e tipos. Isso pode ser útil quando existem conflitos de nomes com bibliotecas de terceiros, bem como para encurtar nomes de tipo dentro de seu código. Abaixo está um exemplo do que parece.

using Forms = System.Windows.Forms;

A maioria dos exemplos que eu vi em torno da web tendem a usar nomes capitalizados não abreviados como aliases, como o alias Formas no exemplo acima. Em alguns lugares, incluindo a oficial MSDN página que explica exemplo, com um alias de colAlias ?? para o namespace System.Collections . Para torná-lo mais complicado, pode haver uma preferência por alguns para escolher diretrizes diferentes dependendo se um alias de namespace ou de um tipo de alias está sendo definido.

A fim de dar algum fundo para por isso que eu estou interessado quaisquer orientações com nomes de alias eu vou explicar o que estou fazendo. Em um projeto recente que começou simplificando um padrão onde eu tenho várias classes que herdam de uma classe base genérica que aceita argumentos de tipo complexas usando apelidos de tipo.

Então, usando esta técnica o exemplo complexo abaixo torna-se a muito mais legível, uma vez aliases tipo são aplicadas.

public class MyClass: MyGenericBaseClass<TripleLindyFancyAlgorithm<List<SomeValueType>>, List<SomeValueType>>
{
    public override List<SomeValueType> DoSomething(TripleLindyFancyAlgorithm<List<SomeValueType>> operation)
    {
        // ...
    }
 }

E abaixo a versão must limpo usando aliases tipo.

using Result = List<SomeValueType>;
using Algorithm = TripleLindyFancyAlgorithm<List<SomeValueType>>; // Note: cannot reference an alias within an alias definition!

public class MyClass: MyGenericBaseClass<Algorithm, Result>
{
    public override Result DoSomething(Algorithm operation)
    {
        // ...
    }
 }

Embora isso parece muito mais simplistas, é fácil esquecer que um alias como Resultado é realmente apenas um alias para lista e que não há nenhum tipo real chamado Resultado . A fim de separar os conceitos visualmente estou considerando seguinte alguma convenção prefixo semelhante ao uso de sublinhado '_' antes de os membros privados, a fim de ajudar a distinguir aliases tipo de tipos reais. Antes do fazer no entanto eu quero ter certeza que eu não estou reinventando a roda uma vez talvez já convenções mais estabelecidas lá fora.

Foi útil?

Solução

aliases Namespace não são uma característica comum da maioria das bases de código -. O último lugar quando eu tê-lo usado, o desenvolvedor sênior não estava familiarizado com ele, apesar de ter trabalhado com C # por muitos anos

Uma vez que é raro, convenções não foram desenvolvidos para ele.

Eu diria que se você estiver indo para usar aliases, discutir isso com sua equipe para criar a sua própria convenção.

aliases

Várias maneiras diferentes que eu vi usado:

  • Um acrônimo do namespace. Normalmente as capitais no espaço de nomes.
  • O fim do namespace -. Se plural de-pluralizado
  • Um nome curto descritivo.

Outras dicas

Eu só iria usar aliases no caso de conflito namespace (ou seja, só se eu estiveste para).

Para mim, pelo menos, qualquer outra utilização é apenas confuso e uma distração.

Pessoalmente, eu só usá-lo para manter intelli-sense limpo.

using StringBuilder = System.Text.StringBuilder;

Se você renomear tipos você abrir a caixa de Pandora para programadores de manutenção.

Os dois casos mais comuns para aliases de namespace são:

  1. Eu vi isso e eu usá-lo (como uma tendência)
  2. I Código porto de outro idioma

Para o primeiro caso, nenhum comentário. Para a segunda um bom exemplo é portar o código de C e uso de namespace aliases de praticidade como:

using i64 = System.Int64;
using u8 = System.Byte;
using u32 = System.UInt32;
using u64 = System.UInt64;

Mesmo se você considerar os aliases acima como programação preguiçoso, que ajuda a erros a evitar.

Eu acho que as pessoas que estão inclinados a não usá-los em tudo são dar a resposta que você pediu. Que é a convenção. Isso não quer dizer que não possa ser útil, mas não usá-lo continua a ser a norma.

Você poderia adotar uma convenção para usá-los para a abstração.

using Id = System.Int32;

Desta forma, você pode facilmente basta substituir essa linha com

using Id = System.Guid;

em algum ponto e nenhum outro código teria que mudar (supondo que você não espiou pela abstração para criar dependências do tipo real ...)

Eu geralmente só usá-los quando eu precisar usar duas classes de nome semelhante em diferentes namespaces, e não quero especificar totalmente o tipo no código:

using xItem = My.Project.NameSpace.Item;
using yItem = Your.ThirdParty.Framework.Item;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top