Extension Methods

<< Click to Display Table of Contents >>

Navigation:  Início >

Extension Methods

Previous pageReturn to chapter overviewNext page

Os métodos de extensão surgiram junto com o .Net Framework 3.5, e permitem adicionarmos novas funcionalidades a tipos existentes, sem a necessidade de alterar o tipo original e recompilá-lo. Devem sempre ser métodos estáticos, mas a chamada para eles é muito parecida com a chamada para métodos de instância. O primeiro parâmetro especifica em qual o tipo que método opera e deve sempre ser seguido da palavra chave this.

 

A classe que conterá o método de extensão, assim como o próprio método, também deve ser estática e a Namespace deve ser declarada nos locais onde o método de extensão deverá ficar disponível, através de using.

 

Exemplo básico

 

Crie a classe de extensão

 

  // extension methods

  public static class Util

   {

      public static string duplo(this string value)

       {

          return value + value;

       }

   }

 

 

Agora pode usar

 

  Console.WriteLine("Valor da string ".duplo());

 

 

Exemplo 2

 

public static class MetodosDeExtensao

{

    /// <summary>

    /// Verifica se um objeto é nulo

    /// </summary>

    /// <param name="obj">object, objeto a ser verificado</param>

    /// <returns>bool, true quando o objeto for nulo</returns>

    public static bool IsNull(this object obj)

    {

        if (obj == null)

            return true;

        else

            return false;

    }

}

 

// usando:

// utilizando a maneira convencional

string strNome = "Fernando Ottoboni";

if (MetodosDeExtensao.IsNull(strNome))

    Console.WriteLine("Nome não informado.");

 

Mais exemplos: Verificar se um string é um DateTime válido

 

/// <summary>

/// Verificar se o conteúdo da string equivale a um DateTime

/// </summary>

public static bool IsDateTime(this string str)

{

    string strData = str;

 

    if (string.IsNullOrEmpty(strData))

        return false;

 

    try

    {

        DateTime datData = Convert.ToDateTime(strData);

        return true;

    }

    catch

    {

        return false;

    }

}

 

Verificar se um string é um Decimal válido

 

/// <summary>

/// Verificar se o conteúdo da string equivale a um decimal.

/// </summary>

public static bool IsDecimal(this string str)

{

    if (String.IsNullOrEmpty(str))

        return false;

 

    try

    {

        Convert.ToDecimal(str);

        return true;

    }

    catch

    {

        return false;

    }

}

 

Retorna a string reversa

 

/// <summary>

/// Retorna a string de forma reversa

/// </summary>

/// <param name="str">String a ser revertida</param>

/// <returns>String revertida</returns>

public static string ReverseString(this string str)

{

    char[] arr = str.ToCharArray();

    Array.Reverse(arr);

    return new string(arr);

}

 

Extrai um Substring do lado esquerdo da string conforme a quantidade de caracteres desejada

 

/// <summary>

/// Extrai um Substring do lado esquerdo da string

/// conforme a quantidade de caracteres desejada

/// </summary>

/// <param name="str">String para extrair o substring</param>

/// <param name="length">Quantidade de caracteres a extrair</param>

/// <returns>String</returns>

public static string Left(this string str, int length)

{

    if (str.IsNullOrEmpty())

        return str;

 

    if (str.Length <= length)

        return str;

 

    return str.Substring(0, length);

}

 

Extrai um Substring do lado direito da string conforme a quantidade de caracteres desejada

 

/// <summary>

/// Extrai um Substring do lado direito da string conforme a quantidade de caracteres desejada

/// </summary>

/// <param name="str">String para extrair o substring</param>

/// <param name="length">Quantidade de caracteres a extrair</param>

/// <returns>String</returns>

public static string Right(this string str, int length)

{

    if (str.IsNullOrEmpty())

        return str;

 

    if (str.Length <= length)

        return str;

 

    return str.ReverseString().Substring(0, length).ReverseString();

}