Ir para o conteúdo
O que é o método de extensão em C#?

O que é o método de extensão em C#?

Muitas vezes recebo perguntas sobre o Método de Extensão em C#. O método de extensão foi introduzido no C# versão 3.0. e nos permite adicionar funcionalidades em uma classe existente sem modificá-la, estendê-la ou recompilá-la.

4min read

Muitas vezes recebo perguntas sobre o Método de Extensão em C#. O método de extensão foi introduzido no C# versão 3.0. e nos permite adicionar funcionalidades em uma classe existente sem modificá-la, estendê-la ou recompilá-la.

Essencialmente, o Método de Extensão nos permite adicionar um novo método a uma classe existente:

  • Sem modificá-lo ou adicionar código
  • Sem estendê-lo ou criar um novo tipo derivado
  • Sem recompilar a classe
Os métodos de extensão são um tipo especial de método estático, mas podem ser chamados em objetos como um método de instância. Portanto, um método de extensão pode ser usado da mesma forma que os métodos de instância normais.

Os métodos de extensão são um tipo especial de método estático, mas podem ser chamados em objetos como um método de instância. Portanto, um método de extensão pode ser usado da mesma forma que os métodos de instância normais.

Etapas para criar um método de extensão

Passo 1: Defina uma classe visível estática que conterá o Método de Extensão ou Métodos de Extensão. Verifique se a classe está visível para o código do cliente aplicando o modificador de acesso apropriado.

Passo 2: Crie um método estático com pelo menos o mesmo nível de visibilidade que a classe que o contém.

Etapa 3: O primeiro parâmetro do Método de Extensão sempre especifica o tipo no qual o método opera. Verifique se o nome do tipo é precedido pelo modificador "this".

Passo 4: No código de chamada, adicione o namespace que contém a classe Extension Method.

Passo 5: Use o método de extensão no tipo no mesmo método de instância pode ser usado. Lembre-se de que não precisamos passar o primeiro parâmetro porque isso denota o tipo, no entanto, devemos passar o segundo parâmetro para chamar o método de extensão.

Vamos criar um método de extensão!

Vamos criar um método Extension para a classe String. A classe de cadeia de caracteres não tem nenhum método WordCount. Vamos começar criando um projeto de aplicativo de console e, em seguida, adicionar uma classe ao projeto de aplicativo de console. Nomearemos a classe StringExtension.

Depois que a classe é criada, temos que executar as etapas conforme discutido anteriormente:

  1. Tornar a classe estática e pública neste caso
  2. Add a static method
  3. Como a classe é pública, torne o método público também
  4. Passe o primeiro parâmetro do método estático como o nome da classe precedido pela palavra-chave "this"
  5. Escreva o código dentro do método para implementar a funcionalidade
namespace ExtensionMethodDemo
{
    public static class StringExtension
    {
        public static int WordCount(this string s)
        {
            int count = 0;
            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] != ' ')
                {
                    if ((i + 1) == s.Length)
                    {
                        count++;
                    }
                    else
                    {
                        if (s[i + 1] == ' ')
                        {
                            count++;
                        }
                    }
                }
            }
            return count;
        }
    }
}

Na listagem de código acima, criamos um Método de Extensão para contar o número de palavras em uma determinada string. Você pode notar que:

  1. A classe StringExtension é uma classe estática pública;
  2. O método WordCount é um método estático público;
  3. O primeiro parâmetro no método WordCount é uma cadeia de caracteres porque estamos criando WordCount como um método de extensão da classe de cadeia de caracteres;
  4. A primeira cadeia de caracteres do tipo de parâmetro é precedida pela palavra-chave "this".

Antes de usar o Método de Extensão, vamos compilar o projeto. Para fazer isso, precisamos executar as seguintes etapas:

  1. Adicione DLL ao projeto do cliente, se tivermos criado o método de extensão em uma biblioteca diferente.
  2. Adicione namespace da classe Extension Method com using diretiva.
  3. Use o Método de Extensão como método de instância normal.

Podemos usar o Método de Extensão recém-criado, conforme mostrado na lista abaixo:

using System;

namespace ExtensionMethodDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter a senetence");
            string inputstr = Console.ReadLine();
            int numberofword = inputstr.WordCount();
            Console.WriteLine(numberofword);
            Console.ReadKey(true);
        }
    }
}

Como observamos na listagem acima, o Método de Extensão WordCount é usado para contar o número de palavras em uma frase. O Visual Studio também mostra os Métodos de Extensão no IntelliSense, acrescentando a palavra extensão ao lado do nome do método, conforme mostrado na imagem abaixo:

mostra os Métodos de Extensão no IntelliSense, acrescentando a palavra extensão ao lado do nome do método, conforme mostrado na imagem abaixo

Como vemos, podemos usar um método de extensão da mesma forma que qualquer método de instância. Pode haver um cenário em que temos um método de instância e um método de extensão com o mesmo nome e assinatura. Nesse caso, sempre o método de instância tem mais prioridade sobre o método de extensão.  Existem alguns pontos importantes que devemos ter em mente sobre o Método de Extensão:

  1. Ele tem menos prioridade do que o método de instância, portanto, se uma classe tiver um Método de Extensão e um Método de Instância com o mesmo nome e assinatura, o método de instância terá prioridade.
  2. Se um método de extensão entrar em conflito com um método de membro do tipo de destino, o método de membro será sempre invocado em vez do método de extensão.
  3. O método de extensão só pode acessar membros privados do tipo de destino.

Os métodos de extensão são muito úteis para adicionar funcionalidade em uma classe existente. Muitas funções LINQ são implementadas como métodos de extensão. Espero que as informações fornecidas aqui ajudem você em seus projetos, e obrigado pela leitura!

Solicite uma demonstração