Novas Funcionalidades C# 3.0 – Extensions Methods

Mudámos de casa – visitem o novo site em www.istomesmo.com

Artigo Principal – As Novas Funcionalidades do C# 3.0

Esta é sem dúvida umas das funcionalidade que mais gostei no C# 3.0. Com ela podemos extender tipos existentes (string, int, etc…) ou tipos construídos (client, car, person, etc…) com métodos adicionais. Estes métodos estáticos podem ser invocados com a mesma sintaxe que os métodos de instância.

Esta funcionalidade pode ser extremamente útil no desenvolvimento, e tornar o código muito mais limpo e reutilizável. De seguida vou mostrar um exemplo, de como podemos capitalizar as primeiras letras das palavras que constituem uma determinada string. Para isso vamo criar um Extension Method ao tipo string:

public static class IstoMesmoExtensions
{
public static string ProperCase(this string s)
{
string[] words = s.Split(‘ ‘);
string result = string.Empty;

foreach (string i in words)
{
result = result + i.Substring(0, 1).ToUpper() +

i.Substring(1).ToLower() + ” “;
}
result = result.Substring(0, result.Length – 1);
return result;
}
}

Os métodos têm de ser criados obriatóriamente dentro de classes estáticas, e têm também eles de serem estáticos. O primeiro argumento do método define o tipo de dados a extender, como podem reparar no exemplo anterior, extendemos o tipo string. Reparem também que precisamos de utilizar a palavra reservada this como modificador do primeiro argumento do método. Os Extension Methods podem receber mais argumentos, estando apenas o primeiro reservado para o tipo de dados a extender.

De seguida podem ver um exemplo de utilização da extensão criada:

using IstoMesmoExtensions;

protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = TextBox1.Text.ProperCase();
}

A utilização é bastante simples, basta importar as extensões criadas, através do respectivo using e depois utilizar em qualquer objecto do tipo string.🙂

Este foi um exemplo bastante simples, para mostrar no que consistem os Extension Methods, no entanto, esta é uma funcionalidade extremamente poderosa, que pode ser usada por exemplo para extender uma camada de acesso a dados gerada automaticamente, em que o código gerado não deve ser alterado porque pode ter de ser regerado.

Era bastante interessante criar uma biblioteca com um conjunto de extensões úteis, para podermos utilizar nos nossos projectos.

Neste site já existe uma pequena biblioteca com conversões entre os vários tipos nativos do .NET.

Partilhem as vossas ideias de funções que seriam úteis no quotidiano.

 

Se gostaram deste artigo subscrevam a feed RSS do istomesmo, para ficarem actualizados sobre os últimos artigos.

Subscrevam aqui a fedd RSS

3 Respostas

  1. […] Novas Funcionalidades C# 3.0 – Extensions Methods « Isto Mesmo Esta funcionalidade pode ser extremamente útil no desenvolvimento, e tornar o código muito mais limpo e reutilizável. (tags: istomesmo.wordpress.com 2008 mes2 dia5 at_tecp extension_methods C# C#3.0 blog_post) […]

  2. Hhmmm,

    Esta funcionalidade não me aprás tanto… faz-me lembrar as caracteristicas core das linguagens dinâmicas (PHP, Javascript, etc) onde podes declarar qualquer coisa como quiseres e onde quiseres…

    E cada vez mais o Object Oriented e os design patterns vao à vida com features destas!

  3. Ineressante … !Ja agora fica apenas uma sugestão, se a string ao ivés de ser por ex. “ola mundo” for “ola mundo”, ou seja com mais do que um espaço entre palavras o metodo devolve uma Exception. Essa situaçao, utilizador introduzir por lapso mais do que 1 espaço, acontece com alguma frequência !
    Obrigado e parabéns pela simplicdade e clareza do artigo.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: