Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Esse conteúdo é reimpresso por permissão da Pearson Education, Inc. das Diretrizes de Design da Estrutura: Convenções, Idiomas e Padrões para Bibliotecas .NET Reutilizáveis, 2ª Edição. Essa edição foi publicada em 2008, e desde então o livro foi totalmente revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
Os métodos de extensão são um recurso de linguagem que permite que métodos estáticos sejam chamados usando a sintaxe de chamada do método de instância. Esses métodos devem usar pelo menos um parâmetro, que representa a instância em que o método deve operar.
A classe que define esses métodos de extensão é conhecida como a classe "patrocinador" e deve ser declarada como estática. Para usar métodos de extensão, é necessário importar o namespace definindo a classe de patrocinador.
❌ EVITE definir frívolamente os métodos de extensão, especialmente em tipos que você não possui.
Se você tiver código-fonte de um tipo específico, considere usar métodos de instância normais. Se você não possui um método e deseja adicionar um, tenha muito cuidado. O uso excessivo de métodos de extensão tem o potencial de sobrecarregar as APIs de tipos que não foram projetados com esses métodos.
✔️ CONSIDERE o uso de métodos de extensão em qualquer um dos seguintes cenários:
Para fornecer funcionalidade auxiliar relevante para cada implementação de uma interface, se essa funcionalidade puder ser escrita em termos da interface central. Isso ocorre porque implementações concretas não podem ser atribuídas a interfaces de outra forma. Por exemplo, os
LINQ to Objectsoperadores são implementados como métodos de extensão para todos os IEnumerable<T> tipos. Assim, qualquerIEnumerable<>implementação é habilitada automaticamente para LINQ.Quando um método de instância introduzisse uma dependência em determinado tipo, mas essa dependência violasse as regras de gerenciamento de dependências. Por exemplo, uma dependência de String para System.Uri provavelmente não é desejável, e assim, o método de instância de
String.ToUri()que retornaSystem.Uriseria o design incorreto de uma perspectiva de gerenciamento de dependência. Um métodoUri.ToUri(this string str)de extensão estático retornandoSystem.Uriseria um design muito melhor.
❌ EVITE definir métodos de extensão em System.Object.
Os usuários de VB não poderão chamar esses métodos em referências de objeto usando a sintaxe do método de extensão. A VB não dá suporte à chamada desses métodos porque, no VB, declarar uma referência como Object força todas as invocações de método nela a serem vinculadas tardiamente (o membro real chamado é determinado em tempo de execução), em contraste com as vinculações aos métodos de extensão que são determinadas em tempo de compilação (vinculação antecipada).
Observe que a diretriz se aplica a outros idiomas em que o mesmo comportamento de associação está presente ou em que não há suporte para métodos de extensão.
❌ NÃO coloque métodos de extensão no mesmo namespace que o tipo estendido, a menos que seja para adicionar métodos a interfaces ou para gerenciamento de dependências.
❌ EVITE definir dois ou mais métodos de extensão com a mesma assinatura, mesmo que eles residam em namespaces diferentes.
✔️ CONSIDERE definir métodos de extensão no mesmo namespace que o tipo estendido se o tipo for uma interface e se os métodos de extensão forem destinados a ser usados na maioria ou em todos os casos.
❌ NÃO defina métodos de extensão implementando um recurso em namespaces normalmente associados a outros recursos. Em vez disso, defina-os no namespace associado ao recurso ao qual pertencem.
❌ EVITE a nomenclatura genérica de namespaces dedicados aos métodos de extensão (por exemplo, "Extensões"). Use um nome descritivo (por exemplo, "Roteamento") em vez disso.
Partes © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso por permissão da Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 pela Addison-Wesley Professional como parte da Microsoft Windows Development Series.