A evolução dos Delegates


Em tão pouco tempo o delegate evoluiu muito dentro da plataforma .NET. Supondo que temos um delegate que recebe dois números inteiros e retorna um valor, também inteiro, temos as seguintes formas de proceder para executar o delegate nas respectivas versões do .NET até o momento:

delegate int Operacao(int a, int b);

[ Versão 1.x ]
static void Main(string[] args)
{
    Operacao op = new Operacao(Soma);
    Console.WriteLine(op(2, 4));
}

public static int Soma(int a, int b)
{
    return (a + b) * 3;
}

[ Versão 2.0 ]
static void Main(string[] args)
{
    Operacao op = new Operacao(delegate(int a, int b)
    {
        return (a + b) * 3;
    });

    Console.WriteLine(op(2, 4));
}

[ Versão 3.5 ]
static void Main(string[] args)
{
    Operacao op = (a, b) => (a + b) * 3;
    Console.WriteLine(op(2, 4));
}

A primeira versão não tem o muito o que comentar. É aquilo e pronto! Já a versão 2.0 do .NET permitiu a criação de métodos anonimos, o que evita de criarmos um método auxiliar (Soma) para vincularmos ao delegate. Já a versão 3.5 vai além. Como podemos notar, especificamos os parametros antes do operador “=>” (e os tipos são inferidos de acordo com a assinatura do delegate). Após esse operador é onde efetivamente colocaremos o código do método.

Isso é usado extensivamente quando utilizamos o Linq. Particularmente, a primeira vista eu também achei um bocado complexo mas praticando (nem que for por brincandeira) voce se adapta rapidamente.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s