Olá pessoal, neste artigo 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.

 Veja um exemplo prático de um Extension Method nativo do .NET:

 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 logo abaixo:


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 seguinte codificação:


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.

 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

 wellingtonbalbo@gmail.com