Extension Methods é um recurso que quem costuma trabalhar em linguagens de script, como Ruby, já está mais acostumado. Consiste em "inserir" métodos em objetos já compilados, como uma string, por exemplo. Sim, esqueça a sua classe StringHelper ou StringUtil, agora os métodos utilitários que você sempre quis poderão ser inseridos diretamente na fonte.
Vamos à prática: primeiro vou mostrar como um extension é declarado, depois o exemplo de uso. Vou fazer um exemplo que não é tão útil, mas a intenção aqui é apenas mostrar a funcionalidade.
Imaginemos que temos URLs em formato de string na nossa aplicação e precisamos ter o conteúdo destas URLs. Vou criar um extension no objeto string que lê essa URL e retorna o seu conteúdo. Vamos à implementação:
static class Extensions
{
public static string ReadUrl(this string str)
{
return new StreamReader(WebRequest.Create(str).GetResponse().GetResponseStream()).ReadToEnd();
}
}
view raw This Gist brought to you by GitHub.
Agora o exemplo de como utilizar o método que criei:
string responseBody = "http://www.google.com".ReadUrl();É fácil criar um extension. Primeiro precisamos de uma classe e um método static. O método extension tem uma peculiaridade, o primeiro parâmetro possui a palavra chave this seguido pelo objeto no qual o extension será "inserido". A partir deste parâmetro, os subsequentes serão efetivamente utilizados na chamada do método. Esse primeiro parâmetro é muito importante, perceba que ele representa a instância do próprio objeto. No exemplo, a string responseBody vai ter o conteúdo HTML da página inicial do Google.
À primeira impressão parece uma implementação complicada, mas nada mais que alguns minutos serão necessários para se familiarizar com isso.
Eu sempre fui fã das linguagens mais dinâmicas, e nessa característica as linguagens de script são a Disney. Esse recurso adicionado ao C# 3.0 nos dá flexibilidade para criar métodos que vão organizar bastante o nosso código. Em breve coloco mais artigos sobre .NET.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.