Quais são as melhores práticas para a utilização de métodos de extensão no .net?

votos
37

Tenho visto estes serem utilizados em todas as direções, e foram acusados de usá-los de forma errada (embora, nesse caso, eu estava usando-los dessa forma para demonstrar um ponto ).

Então, o que você acha que são as melhores práticas para o emprego de métodos de extensão?

Caso as equipes de desenvolvimento criar uma biblioteca de métodos de extensão e implantá-los em vários projetos?

Deve haver uma coleção de métodos de extensão comuns na forma de um projeto open source?

Update: decidiram criar uma grande biblioteca de métodos de extensão organização

Publicado 06/08/2008 em 08:52
fonte usuário
Em outras línguas...                            


6 respostas

votos
7

O lançamento do Guia de Design Framework, 2nd Edition terá alguma orientação para a implementação de métodos de extensão, mas em geral:

Você só deve definir métodos de extensão "onde eles fazem sentido semântico" e estão fornecendo funcionalidade de ajuda relevantes para cada aplicação.

Você também deve evitar estendendo System.Object como nem línguas todos .NET será capaz de chamar o método de extensão como uma extensão. (VB.NET, por exemplo, seria necessário chamá-lo como um método estático regular sobre a classe de extensão estático.)

Não defina um método de extensão no mesmo namespace como o tipo estendido a menos que você está estendendo uma interface.

Não defina um método de extensão com a mesma assinatura como um método "real", uma vez que nunca será chamado.

Respondeu 16/08/2008 em 18:41
fonte usuário

votos
4

você pode querer dar uma olhada em http://www.codeplex.com/nxl e http://www.codeplex.com/umbrella que são ambas as bibliotecas método de extensão. Eu, pessoalmente, não tive uma olhada no código fonte, mas eu tenho certeza que os caras lá seria capaz de lhe dar algumas boas indicações.

Respondeu 07/08/2008 em 13:14
fonte usuário

votos
3

A linguagem Objective-C teve "Categorias" Desde o início de 1990; estes são essencialmente a mesma coisa que Métodos de extensão .NET. Ao olhar para as melhores práticas que você pode querer ver o que regras de ouro Objective-C (Cacau & seguinte) desenvolvedores vêm-se com sua volta.

Brent Simmons (o autor do leitor NetNewsWire RSS para Mac OS X e iPhone) só postou hoje sobre suas novas regras de estilo para o uso de categorias e tem havido um pouco de discussão na comunidade do Cacau em torno desse post.

Respondeu 08/08/2008 em 08:46
fonte usuário

votos
3

Eu estive incluindo os meus métodos de extensão com meus bibliotecas centrais na classe Utils porque as pessoas que estão trabalhando com o meu quadro é provável encontrar os métodos úteis, mas para implantação em massa, onde o desenvolvedor final pode ter uma escolha de bibliotecas método de extensão, aconselho colocando todas as suas extensões em seu próprio namespace, mesmo seu próprio arquivo de projeto, de modo que as pessoas podem optar por adicionar uma referência ou uma instrução using ou simplesmente quando necessário, assim:

Core.Extensions.Base64Encode(str);

Minha classe Utils é a minha melhor amiga em todo o mundo, foi antes de métodos de extensão veio e eles só têm ajudado a fortalecer nosso relacionamento. A maior regra que eu iria por é dar às pessoas a escolha sobre o quadro de extensão que eles estão usando, sempre que possível.

Respondeu 06/08/2008 em 09:08
fonte usuário

votos
2

Eu acho que isso depende do que efeito os métodos de extensão servir.

  • Os métodos de extensão que se relacionam com as necessidades de negócios específicas de um projeto (se eles estão ligados a tipos de dados ou objetos personalizados básica) não devem ser incluídos em uma biblioteca que seriam distribuídos em vários projetos.
  • Os métodos de extensão que se relacionam com os tipos de base de dados (int, corda, etc) ou genéricos que têm uma aplicação mais ampla, pode ser embalada e distribuída através de projectos.

Tome cuidado para não globalmente incluem métodos de extensão que têm pouca aplicação, uma vez que apenas entupir intellisense e pode levar à confusão e / ou uso indevido.

Respondeu 06/08/2008 em 09:02
fonte usuário

votos
1

Quando eu descobri sobre extensões Eu realmente usado em demasia e abusada eles.

Para a maior parte eu já começaram a se afastar de usar quaisquer métodos de extensão para uma série de razões.

Algumas das razões eu parei de usá-los são anotadas no link do blog de Scott acima, como "Pense duas vezes antes de estender tipos que você não possui". Se você não tem controle sobre a fonte para os tipos que você está estendendo-se, você pode encontrar problemas / colisões no futuro, se o tipo de fonte tem algumas adições / alterações, como mover seu projeto para uma versão mais recente .NET. Se a versão mais recente .NET inclui um método do tipo do mesmo nome que o seu ramal, alguém vai sendo esmagados.

A principal razão pela qual eu parei de usar métodos de extensão é que você não pode dizer rapidamente a partir da leitura do código onde a fonte do método é e quem é o "dono" dele.

Quando apenas a leitura através do código que você não pode dizer se o método é um apenas um método API NET padrão de extensão ou do tipo.

O menu intellisense pode ficar muito confuso muito rápido.

Respondeu 15/07/2013 em 21:07
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more