LINQ - Conceitos e fundamentos - Métodos de extensão
O
que são os Métodos de Extensão (Extension Methods) ? Os métodos de extensão permitem ampliar a funcionalidade já existente em uma classe ou tipo. |
Uma das funcionalidades implementadas a partir da versão 3.5 da plataforma .NET são os métodos de extensão;
Para dar suporte ao LINQ foi necessário adicionar novos métodos em classes/tipos já existentes sem usar o recurso da herança ou ter que recompilar a classe/tipo original.
Isso foi necessário pois muitas classes/tipos não permitiam a modificação por meio da herança e além disso teriam que continuar compatíveis com as versões anteriores.
Sem utilizar os métodos de extensão quais as opções que temos para incluir novas funcionalidades em classes e interfaces ?
Vejamos:
Mesmo optando por usar um dos métodos acima, se fosse viável é claro, teríamos que nos preocupar em manter a compatibilidade com as versões anteriores tornando o processo complexo e trabalhoso.
Uma solução elegante para resolver estes problemas e conseguir o objetivo almejado foi implementar os métodos de extensão que fornecem um mecanismo para estender as classes/tipos já existentes, mesmo quando a classe/tipo não da suporte a herança, com novos métodos que podem ser usados como métodos normais de instância.
Nota: Os métodos de extensão são uma característica específica da plataforma .NET e não tem correspondência nos conceitos de orientação a objeto padrão.
Veja por exemplo a classe System.String ; ela não dá suporte a herança e não podia ser alterada ou estendida. Eu disse não podia, pois na versão 3.5 do .NET Framework podemos alterá-la usando os métodos de extensão.
Vamos supor, apenas a título de demonstração, que você deseja estender a classe System.String usando o recurso dos métodos de extensão, incluindo uma nova função chamada FirstCharUpper() (belo nome !!!) que tem o objetivo de converter o primeiro caractere de uma string em caixa alta; assim, macoratti seria convertido para Macoratti.
O código necessário para realizar tal tarefa é muito simples e consiste de uma única linha de código:
StrConv(STRING, VbStrConv.ProperCase)
Como podemos implementar este recurso como um método de extensão ???
Na linguagem Visual Basic para implementar os métodos de extensão você tem que seguir algumas regras :
A restrição de somente poder usar o recurso em módulos deve-se ao fato de os módulos não poderem participar de cadeias herdadas e de não existirem como módulos parciais simplificando assim o processo.
A título de exemplo abra o Visual Basic 2008 Express Edition e crie um novo projeto do tipo Windows Forms Application com um nome sugestivo qualquer;
Inclua um módulo ao seu projeto via opção Project -> Add Module e informe o nome MetodosExtensao.vb;
A seguir inclua o código abaixo no módulo criado;
No código acima temos que :
- Estamos usando o namespace System.RuntimeCompileServices ;
- A função FirstCharUpper() que definimos possui o atributo <Extension()>;
- O primeiro parâmetro do tipo deve ser o tipo que estamos estendendo , no caso a classe System.String; (Não podemos usar Optional nem ParamArray)
Agora abra o editor de código para o formulário form1.vb e defina os namespaces e o código conforme a figura a seguir:
Perceba que o a digitar o ponto após a string s , o intellisense exibe os métodos de extensão com uma seta azul para baixo que indica que o método não faz parte da classe mas foi agregado a mesma. (Não devemos usar o recurso para substituir os métodos de instância existentes na classe original)
Podemos então concluir que os métodos de extensão são uma forma elegante de resolver o problema de incluir novas funcionalidades que dão suporte ao LINQ e que podem ser usadas com cautela e bom senso.
Conselho : Use , se preciso , mas não abuse.
Até o próximo artigo...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - O tipo de dados Dynamic - Apresentando o tipo dynamic; propriedades e recursos
C# - 10 dicas para otimizar o seu código - Aumente o desempenho e eficácia de sua aplicação C#