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

Mais detalhes sobre os métodos de extensão

Para criar métodos de extensão basta apenas que classe e método sejam estáticos e que primeiro argumento do método seja definido com this ${tipo}?

Eu aprendi como se faz, mas achei algo meio que mágico, não entendi fundamento ou como a classe list do .net sabe que existe a classe de extensão

Podem detalhar um pouco mais sobre isso?

namespace ByteBank.SistemaAgencia
{
    public static class ListExtension
    {
        public static void AddMany(this List<int> listaDeInteiros, params int[] itens)
        {
            foreach (int item in itens)
            {
                listaDeInteiros.Add(item);
            }
        }
    }
}

Obrigado

2 respostas
solução!

Olá, Silas, tudo bem? Você já utilizou o sharplab.io ? Este site foi indicado em um dos cursos que fiz aqui na Alura, é interessante ver o código após "compilado". Faça uma referencia a essa extension e coloque o sharplab.. Quando compilado, o código passa a chamar a ClasseEstática.Metodo, o interpretador está preparado para entender isso, não sei se teria algo além disso. Caso tenha, espero que alguém responda e eu possa aprender mais essa também. Fiz um exemplo pequeno e coloquei o link com "seu" código no sharplab. Meu exemplo a seguir:

class Program
{
    static void Main(string[] args)
    {
        int valorQualquer = 10;
        var resultado = valorQualquer.Soma(5); //<- chamando extension
    }
}
public static class Calculo
{
    public static int Soma(this int valorAtual, int valorAdicional)
    {
        return valorAtual + valorAdicional;
    }
}

passa a ser:

class Program
{
        private static void Main(string[] args)
        {
                int valorAtual = 10;
              int num = Calculo.Soma(valorAtual, 5);//<- como ficou, perceba que ele não fez nada além de chamar um método estático passando a própria referência, mais os parametros solicitados
        }
 }

 [Extension]
public static class Calculo
 {
         [Extension]
          public static int Soma(int valorAtual, int valorAdicional) //<- o this sumiu pós compilado
        {
                return valorAtual + valorAdicional;
        }
}

Seu código no sharpLab.

https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQAwAIpwCwG5nIB2AhgLYCmAzgA7EDG56AwgPaGUsA25AgtdYiQBvZOjGYYmOAHZR4kUnFKpANkzZ0AWWIBLQgAosqANoBddMQBOAc0oBKOcvQKnTgDI7KAFwA8erwB86ABuxJwsllQ8wDp0Omy6lOgAvOiE5ADu6B7efoSBQtIANAAcRQCcAL74iq5ijnXZnr7+QZzNxAAi5ACS+eQ6lixJqelZOS35Afp2NY3i7d5dvf2DwwB00cDahACe+qHhkZTRsfEknusAKiw8lpbE+3azBLXzrOxc5OsASuTEwAA0uQnjVXnVKuDxJC3pgAMyqCRNbwAUQAHl5yOxzg0XK4oAisGooBotjt9l4ABaeZGTQLoRZeYh/ABm5EihDiAOIRXQtAepCS/jM6B0mPYDlhSjx8xZEX+dEp6H0/lFmNIosIaqx9gadRl8wWHVZ7KxXOAxE2wGAKvVLylrhhEIaMJhQA=

Ei Carlos, tudo bem por aqui e com você?

Então no decorrer do curso o instrutor abordou com mais detalhes sobre classe/métodos de extensão.

Sobre o sharplab, eu não conhecia, agora estou explorando possibilidades aqui, valeu pela dica.

Obrigado!