Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

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.

posted on Thursday, May 10, 2007 6:58 AM

Feedback

# re: A evolução dos Delegates 5/10/2007 5:50 PM Ricardo Oneda

Realmente, a sintaxe é um pouco estranha, e pode causar estranheza. Pode gerar código difícil para ler, como em C/C++, se mal utilizado

# re: A evolução dos Delegates 5/12/2007 8:18 PM Israel Aece

Ola Oneda,

Sim, concordo contigo. Mas por um outro lado, eu prefiro dessa forma ao invés de criar um único procedimento para apenas uma linha de código. Isso acabava "poluindo" um pouco a classe.

Att,

# Resumo da semana - 14/05/07 5/14/2007 7:40 PM Console.Write(this.Opinion)

Resumo da semana - 14/05/07

# Func vs. Expression 9/2/2008 9:21 PM Israel A

Title  
Name  
Url
Box Code
Protected by FormShield
Comments