Um método de extensão C# permite que os desenvolvedores ampliem a funcionalidade de um tipo existente sem criar um novo tipo derivado, recompilamento ou modificar o tipo original. C# método de extensão é um tipo especial de método estático que é chamado como se fosse um método de instância no tipo estendido. Neste artigo, criaremos uma biblioteca de classes e, em seguida, estenderemos sua funcionalidade a partir do código de chamada, implementando métodos de extensão em C#.

Método de extensão C

O método de extensão C# é um método estático de classe estática, onde o modificador “este” é aplicado ao primeiro parâmetro. O tipo do primeiro parâmetro será o tipo que é estendido.

Os métodos de extensão só estão no escopo quando você importa explicitamente o namespace para o seu código fonte com uma diretiva de uso.

Crie uma Biblioteca de Classes

Crie um projeto de Biblioteca de Classes em Visual Studio.

image

Adicione o seguinte código ao Class1. O Class1 tem dois métodos: Display e Print.

using System;
using System.Text;

namespace ClassLibExtMethod
{
    public class Class1
    {
        public string Display()
        {
            return ("I m in Display");
        }

        public string Print()
        {
            return ("I m in Print");
        }
    }
}

Crie um aplicativo de chamada

Agora crie um aplicativo de console no Visual Studio usando o Novo Projeto. Selecione Arquivo > Projeto new > e selecione Visual C# e Aplicativo de console conforme mostrado abaixo.

image

Adicione a referência da biblioteca de classes criada anteriormente a este projeto.

image

Use o seguinte código e use o ClassLibExtMEthod.dll no seu namespace:

using System;
using System.Text;
using ClassLibExtMethod;

namespace ExtensionMethod1
{
    public static class XX
    {
         public static void NewMethod(this Class1 ob)
        {
            Console.WriteLine("Hello I m extended method");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Class1 ob = new Class1();
            ob.Display();
            ob.Print();
            ob.NewMethod();
            Console.ReadKey();
        }
    }
}

No código acima, você vê que há uma classe estática XX com um método, NewMethod. Se você notar, o NewMethod toma classe1 como parâmetro. É assim que você estende uma biblioteca existente e adiciona seus próprios métodos a ela. Agora, este Novo Método está disponível através da biblioteca de classes.

Quando você usa o Visual Studio Intellisense, você pode ver que o método de extensão é representado com uma seta (diferente do sinal de método normal), uma vez que eram métodos de instância no tipo estendido. Veja a figura abaixo:

image

A saída do programa anterior parece ser a seguinte.

image

Benefícios dos métodos de extensão

  • Os métodos de extensão permitem que as classes existentes sejam estendidas sem depender da herança ou de ter que alterar o código-fonte da classe.
  • Se a classe estiver lacrada do que não há no conceito de estender sua funcionalidade. Para isso, um novo conceito é introduzido, ou seja, métodos de extensão.
  • Este recurso é importante para todos os desenvolvedores, especialmente se você quiser usar o dinamismo dos aprimoramentos C# no design da sua classe.

Mais trechos de código de métodos de expansão de extensão

using System;
using System.Text;

namespace ExtensionMethod2
{
    public static class ExtMetClass
    {
        public static int IntegerExtension(this string str)
        {
            return Int32.Parse(str);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string str = "123456";
            int num = str.IntegerExtension();
            Console.WriteLine("The output using extension method: {0}", num);
            Console.ReadLine();
        }
    }
}

No programa anterior, usamos um método de extensão IntegerExtension() para converter uma string em um tipo numérico.

Pontos importantes para o uso de métodos de extensão

  • Um método de extensão deve ser definido em uma classe estática de alto nível.
  • Um método de extensão com o mesmo nome e assinatura como método de instância não será chamado.
  • Os métodos de extensão não podem ser usados para substituir os métodos existentes.
  • O conceito de métodos de extensão não pode ser aplicado a campos, propriedades ou eventos.
  • O uso excessivo de métodos de extensão não é um bom estilo de programação.

Conclusão

Espero que este artigo o ajude a entender métodos de extensão em C# 3.0 ou superior. Se você quiser saber mais sobre métodos de extensão, aqui está outro caso de uso: Criar e Usar um Método de Extensão em C#


Artigo Original