Canais iMasters

.NET

C# 3.0 Extension Methods

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.


Comente também

1 Comentário

Cleydson
Cleydson

Acho esse recurso do C# 3.0 fantástico. Acredito que não tem sido muito usado pela falta de costume e conhecimento mesmo da nova leva de programadores. Mas depois do novo livro do Martin Fowler(DSL-Domain Specific Language) tenho quase certeza que a coisa vai mudar de figura.
Muito legal Wagner.

Cleydson
http://twitter.com/cleydson

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize