sábado, 17 de maio de 2008

Extension Methods - C# 3.0

O novo C# 3.0 veio como uma novidade um tanto quanto interessante, as Extension Methods. Como o próprio nome já diz as Extension Methods estendem o comportamento de um tipo.

Vamos trabalhar melhor esse conceito!

No bom e velho ASP tínhamos a função FormatNumber() para tratamento de quantidade de casas decimais , que eu particularmente utilizava bastante. No C# para obtermos o mesmo efeito a partir de tipos Double temos algo muito simples:

protected void Page_Load(object sender, EventArgs e)
{
Double nota = 17 / 1.5;
Response.Write(Math.Round(nota,2).ToString());
}

Porém alguns ‘migradores’ do ASP para o ASP.Net (assim como eu), já me perguntaram se havia uma forma de criar um método semelhante a função do ASP, apenas por questão de costume.

Bem, poderíamos simplesmente criar uma classe estendida da classe Double e dentro dela criar esse método. PODERÍAMOS. Por ser uma classe sealed, Double não pode ser estendida. Mas em uma certa ‘amarração’ conseguimos sim chegar a um resultado parecido. Veja o exemplo:

Arquivo funcoes.cs
public class funcoes
{
public static Double FormatNumber(Double valor, int casasDecimais)
{
return Math.Round(valor, casasDecimais);
}
}

Arquivo Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Double nota = 17 / 1.5;
Response.Write(funcoes.FormatNumber(nota,4).ToString());
}

Algum tempo se passou e eis que surge o C# 3.0 para melhorar nosso método FormatNumber() e ‘transformá-lo’ em uma extensão do tipo Double. As Extension Methods nos permitem adicionar novos métodos a um tipo existente sem a necessidade de herança. Que beleza. Então vamos ver como ficaria nosso querido método FormatNumber()?

Arquivo Extension.cs
public static class Extension //NÃO, não está errado. Mais uma novidade do C# 3.0: classes estáticas
{
//Observe o 'this' antes do primeiro parâmetro, demonstrando o tipo a que a Extension Method se aplica
public static Double FormatNumber(this Double dbl, int casasDecimais)
{
return Math.Round(dbl, casasDecimais);
}
}

Arquivo Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Double nota = 17 / 1.5;
Response.Write(nota.FormatNumber(2).ToString());
}

Esse foi um exemplo bem simples de uso das Extension Methods. O uso delas vai muito além de um simples capricho de ‘ex-programadores ASP’.

Dica: Milhares e milhares de tópicos e tutoriais na Internet podem ajudar nos seus estudos. Tente usar o Google: http://www.google.com.br/search?hl=pt-BR&q=%22Extension+Methods%22+c%23&meta

Galera um grande abraço e até a próxima, quando falarei sobre LINQ.

Nenhum comentário: