Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Extensão

Eu não entendi muito bem como ele consegue visualizar a minha class Musicas Extensions sem eu herdar, ou/e usar algum construtor como base. Por que eu só usando o this WebApplication no parâmetro a classe Program consegue ver? É por causa da nomenclatura dela, do prefixo Extensions? Poderia me explicar melhor essa parte?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Oi Igor,

A palavra-chave this no primeiro parâmetro do método AddEndPointArtistas indica que ele é um método de extensão. Métodos de extensão permitem adicionar novos métodos a tipos existentes sem modificar o tipo original ou herdar dele.

No caso, this WebApplication app significa que você está adicionando um método à classe WebApplication, permitindo que você chame AddEndPointArtistas como se fosse um método nativo de WebApplication.

Não é a nomenclatura "Extensions" que permite a visualização, mas sim a combinação de ser um método estático e o uso do this no parâmetro, que o define como um método de extensão. A nomenclatura "Extensions" é uma convenção para indicar que a classe contém métodos de extensão.

Exemplo:

public static class MinhasExtensoes
{
    public static int Dobrar(this int numero)
    {
        return numero * 2;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        int valor = 5;
        int valorDobrado = valor.Dobrar(); // Chamando o método de extensão
        Console.WriteLine(valorDobrado); // Saída: 10
    }
}

Neste exemplo, Dobrar é um método de extensão para o tipo int. Você pode chamar Dobrar como se fosse um método nativo de int.

tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓

Não sei se entendi direito, mas o This me permite meio que vincular um método X a uma classe/tipo já existente?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Por isso eu consigo ter acesso ao método? Porque não depende da classe, se eu criar qualquer outro objeto do tipo WebApplication eu vou ter acesso a esses novos métodos. Né?

solução!

Sim! O this em C# possui múltiplas funcionalidades, mas uma das mais interessantes é justamente a capacidade de criar métodos de extensão para tipos existentes.

Métodos de Extensão

Para criar um método de extensão, você precisa:

  1. Criar uma classe estática
  2. Usar o this como modificador do primeiro parâmetro do método

Por exemplo:

public static class StringExtensions
{
    public static bool EstaVazio(this string texto)
    {
        return string.IsNullOrEmpty(texto);
    }
}

Após criar o método de extensão, você pode usá-lo como se fosse um método nativo do tipo:

string minhaString = "teste";
bool vazio = minhaString.EstaVazio();

A palavra-chave this no parâmetro é o que permite que o compilador saiba que aquele é um método de extensão.

Luis, muito obrigado pela explicação. Ajudou de mais, eu não sabia que dava pra fazer isso. kkkk