Olá pessoal, neste artigo veremos os conceitos e exemplos práticos com os Extensions Methods. Acompanhem:
Introdução – Os Extensions Methods (Métodos de Extensão), como o próprio nome diz, seriam uma extensão de uma determinada classe, em forma de método. Um exemplo disso seria um método que “estende” a classe String, um método personalizado que pega todas as letras E de uma palavra e faz determinada ação, ou mesmo um método que estende a classe Int32 ou a Decimal, pegando seus valores e os formatando como valores monetários, enfim temos vários exemplos.
Inicialmente comente o namespace System.Linq e instancie um objeto da classe ArrayList. Note que temos diversos métodos em sua classe, como mostra a Figura 01:
Figura 01 – Classe ArrayList sem Extensions Methods
Agora descomente o System.Linq e chame novamente os métodos, veja na Figura 02:
Figura 02 – Classe ArrayList com Extensions Methods
Percebeu que agora temos alguns métodos com uma seta pra baixo? Então, esses são os Métodos de Extensão que o System.Linq “incorpora” à classe ArrayList.
É importante ressaltar o seguinte: para que os Extensions Methods funcionem, devemos criar uma classe estática e também um método estático, usando o modificador static. Dito isto, crie um projeto no Visual Studio, do tipo Console Application. Nele, adicione uma classe, dando qualquer nome a ela.
Na classe iremos criar um método que retornará a data formatada, para o padrão brasileiro ou americano, dependendo de nossa escolha.
Acompanhe toda a codificação, com explicações pertinentes na Listagem 01.
Listagem 01 – Usando Extensions Methods
namespace Extensions { public static class StringExtensions { public enum DateFormat { USFormat, BrazilianFormat } public static string FormatDateString(this string strData, DateFormat dateFormato) { string strRetorno = "Data Inválida!"; try { DateTime date = DateTime.Parse(strData); if (dateFormato == DateFormat.BrazilianFormat) strRetorno = date.Date.ToString("dd/MM/yyyy"); else strRetorno = date.Date.ToString("MM/dd/yyyy"); } catch { return strRetorno; } return strRetorno; } } }
Note que dei um nome customizado para o namespace e criei classes e métodos estáticos. Criei também um enumerador, onde defino dois tipos de formatações de datas, uma para o padrão brasileiro, outra para o padrão americano. Em meu método, do tipo string, passo como parâmetro um valor string, acompanhada da keyword this (que deve ser usada nesses casos), e o enumerador, também como parâmetro para o método.
No método instancio uma variável do tipo string e uma variável do tipo DateTime que por sua vez recebe a conversão da variável do tipo string, criada anteriormente.
Ao final faço uma verificação: se o formato for brasileiro a variável do tipo string recebe a data formatada como dd/MM/yyyy (padrão brasileiro). Se for americano, recebe o outro formato. Note que se der um erro, o valor padrão, exibindo a mensagem de Data Inválida irá aparecer, ao entrar no bloco catch.
Agora vá à classe Program.cs e use a codificação da Listagem 02:
Listagem 02 – Método chamado no Program.cs
static void Main(string[] args) { string strData = "16/05/1989"; Console.Write(strData.FormatDateString(StringExtensions.DateFormat.USFormat)); Console.ReadKey(); }
Aperte F5 e veja o resultado, na Figura 03:
Figura 03 – Extension Method em Prática
Dessa forma podemos criar Extensions Methods para diversas finalidades, deixo como dica para que vocês usem a criatividade para criar métodos úteis em seu desenvolvimento!
Dica de Site: acessem o site especializado em Extension Methods, com mais de 300 deles, clicando aqui.
Disponibilizo o código fonte para quem tiver interesse clicando aqui.
Assim finalizo o artigo. Muito obrigado a todos!
Créditos à Luciano Pimenta, que fez as videoaulas e ao Portal Linha de Código, por onde pude baixá-las (mediante assinatura), estudá-las e posteriormente fazer este artigo.
Um abraço, e até o próximo artigo.
Wellington Balbo de Camargo