[C#] Extension methods

Extension Methods é uma tecnologia muito útil que nos foi apresentada com o surgimento da versão 3.0 da linguagem C#.
Com ela podemos extender tipos primitivo (string, int, bool, etc.) e classes com métodos adicionais.
Vamos ver sua utilização.

static class ClassFuncoes{
        public static string inverterString(this string Texto){            
            char[] ArrayChar = Texto.ToCharArray();            
            Array.Reverse(ArrayChar);            
            return new string(ArrayChar);
        }
}

Acima criamos uma classe estática chamada “ClassFuncoes”, que contém um método, também estático, chamado “inverterString”.
Para implementar Extension Methods obrigatoriamente os métodos têm de ser criados dentro de classes estáticas, e eles também devem ser estáticos.

Nas versões antigas da linguagem C# teríamos uma estrutura semelhante ao código abaixo para inverter o texto:

string inv = ClassFuncoes.inverterString("AMOR");

Com Extension Methods para inverter um texto, basta fazer o seguinte:

string inv = "AMOR".inverterString();

Ou seja, eu invoco o método diretamente após o texto, ao invés de chamá-lo por uma classe estática e repassar o valor através de parâmetros.

O primeiro argumento do método (no caso “string Texto”) define o tipo de dados a extender. Reparem também que utilizamos a palavra reservada “this” como modificador do primeiro argumento do método.

Seguem mais exemplos de Extension Methods. Agora é para verificar se um e-mail é válido.

        public static bool isValidEmail(this string inputEmail){
            string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                  @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                  @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
            Regex re = new Regex(strRegex);
            return re.IsMatch(inputEmail);
        }

Uso:

bool f = "test@test.com".isValidEmail();

Como vimos Extension Methods simplificam a vida do programador, e são muito faceis de criar. Abraços e até o próximo post!