A versão 3.0 da linguagem C# nos trouxe muitas melhorias, que se deram principalmente pela viabilização do LINQ (Language Integrated Query). Muitas destas novidades podem ser aproveitadas no nosso dia a dia, e neste Post eu vou falar um pouco sobre uma delas: os Extension Methods.
Os Extension Methods ou métodos de extensão são muito parecidos com os métodos estáticos, que podem ser chamados sem a necessidade de instanciarmos um objeto da classe.
Porém o objetivo de um extension method, é “adicionar” métodos a um uma classe já existente, sem a necessidade de modificarmos esta classe. Legal né?
Um exemplo: Que tal seria se tivéssemos um método ToZeroLeft em objetos da classe int? Ajudaria bastante quando precisamos colocar zeros à esquerda de um valor, e gravá-lo em uma string.
Este é apenas um exemplo, com certeza você vai achar diversas outras aplicações para os extensions methods. Chega de conversa e vamos logo ver como isso funciona.
Os seus Extension Methods devem ser criados como métodos estáticos, de preferência em uma classe destinada apenas para estes tipos de métodos. O primeiro parâmetro do método deve ser precedido do modificador this. E o seu tipo define o tipo que será “modificado”, ganhando este novo método. Veja o exemplo abaixo:
Toda vez que importarmos este namespace ExtensionMethods em qualquer outra classe, as variáveis do tipo int “ganharão” o método ToLeftZeros, veja o exemplo abaixo:
Note que a variável numero do tipo int possuí agora o extension method ToLeftZeros. Veja que no intelisense este método aparece com uma pequena seta apontando para baixo, indicando que este é um método de extensão.
Para nós, “usuários finais do C#”, a impressão é que modificamos a classe int, adicionando a ela um novo método. Porém por de trás dos panos, o compilador irá transformar isso em uma chamada ao método estático que criamos.
Como disse no começo, esta é uma funcionalidade que veio no C# 3.0 para viabilizar algumas features do LINQ. Para comprovar isso é simples, adicione uma referencia ao namespace System.Linq e veja o que acontece à suas Arrays:
Note que elas vão “ganhar” uma série de métodos relacionados à linguagem LINQ, como por exemplo o OrderBy.
Espero que faça um ótimo uso dos Extension Methods. Abaixo coloco algumas ótimas referencias sobre este tema:
Grande Abraço e até a próxima!
Assim fica melhor:
ResponderExcluirpublic static string ToLeftZeros(this int inteiro, short Tamanho)
{
return inteiro.ToString().PadLeft(Tamanho,'0');
}