Métodos de extensão C#

Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 04/12/2019


Métodos de extensão (Extensions methods), como o nome sugere, são métodos adicionais. Os métodos de extensão permitem injetar métodos adicionais sem modificar, derivar ou recompilar a classe, estrutura ou interface original. Com os métodos você pode personalizar suas classe ou atributos implementando procedimentos que não existem.

No exemplo a seguir, MaiorQue() é um método de extensão para o tipo int, que retorna true se o valor da variável int for maior que o parâmetro inteiro fornecido.

Exemplo: Método de Extensão

int i = 10;
bool result = i.MaiorQue(100); //returns false 

O método MaiorQue() não é um método do tipo de dados int, inteiro (estrutura Int32). É um método de extensão escrito pelo programador para o tipo de dados int. O método MaiorQue() estará disponível em todo o aplicativo, sempre que você invocar métodos para um int, inteiro e o(s) parâmetros necessários.
Os métodos de extensão possuem um símbolo especial no intellisense do visual studio, para que você possa diferenciar facilmente entre métodos de classe e métodos de extensão.


img Package Manager Console

Agora vamos entender como se escreve um métodos de extensão.
Um método de extensão é realmente um tipo especial de método estático definido em uma classe estática. Para definir um método de extensão, primeiro defina uma classe estática.

Exemplo: Criar uma classe para métodos de extensão

namespace ExtensionMethods
{
    public static class IntExtensions
    {

    }
}

Agora, defina um método estático como um método de extensão em que o primeiro parâmetro do método de extensão especifique o tipo no qual o método de extensão é aplicável. Vamos usar esse método de extensão no tipo int, inteiro. Portanto, o primeiro parâmetro deve ser int precedido pelo modificador this.

Exemplo: Definir um Método de Extensão

namespace ExtensionMethods
{
    public static class IntExtensions
     {
        public static Boolean MaiorQue(this int valor, int referencia)
          {
             return (referencia > valor) ? true : false; 
          }
    }
}

Agora, podemos incluir o método de extensão onde quisermos.

Exemplo: método de extensão

using ExtensionMethods;

class Program
{
    static void Main(string[] args)
    {
        int i = 10;

        bool result = i.MaiorQue(100); 

        Console.WriteLine(result);
    }
}

Nota

  • A única diferença entre um método estático regular e um método de extensão é que o primeiro parâmetro do método de extensão especifica o tipo em que ele vai operar, precedido pela palavra-chave this.

  • Métodos de extensão são métodos personalizados adicionais que originalmente não foram incluídos na classe.

  • Os métodos de extensão podem ser adicionados a classes, estruturas ou estruturas personalizadas, .NET Framework ou de terceiros.
  • O primeiro parâmetro do método de extensão deve ser do tipo ao qual o método de extensão é aplicável, precedido pela palavra-chave this.
  • Os métodos de extensão podem ser usados em qualquer lugar do aplicativo, incluindo o espaço para nome do método de extensão.

Classe com Métodos de Extensão

Agora que você já sabe como funcionam os métodos de extensão, de uma olhada em nossa Classe com Métodos de extensão prontos para seu projeto.



Links Relacionados



Comentários