Created by Thiago Russo
over 8 years ago
|
||
Question | Answer |
o que são "lambdas expressions"? | Às vezes, a assinatura de um método pode ter mais código do q o corpo de um método. Há também situações em que você precisa para criar um método inteiro apenas para usá-lo em um delegate. No C# 2.0, foram add os métodos anônimos. No C# 3.0, as coisas ficaram ainda melhores ado foram add as expressões lambda. |
Exemplo de Lambda expression para criar "delegates" |
Image:
Lambda Delegate (image/png)
|
sintaxe lambda expression | Função lambda ñ tem nenhum nome específico como os métodos convencionais. Devido a isso, funções lambda são chamados de funções anônimas. Vc tb ñ precisa especificar um tipo de retorno explicitamente. O compilador infere isso automaticamente a partir do seu lambda. No exemplo anterior, os tipos de parâmetros x e y ñ são tb explicitamente especificados. A sintaxe para escrever um lambda pode ser compacta. Se um lambda tem apenas um parâmetro, vc pode remover os ( ) Vc pode criar lambdas que abrangem várias declarações usando { } |
lambda com várias declarações { } | |
Func<int,int,int> conceito | Os tipos Func <...> representam delegates que retornam um tipo com 0-16 parâmetros. Todos esses tipos herdam System.MulticastDelegate assim que você pode adicionar vários métodos para a lista de invocação. |
Action <...> conceito | Se você quer um tipo de delegate que não retorna um valor, você pode usar os tipos System.Action. Eles também podem ter 0-16 parâmetros, mas eles não retornam um valor |
o que é "clasure" ? | As coisas começam a tornar-se mais complexa quando a sua função lambda começa referenciar variáveis declaradas fora da expressão lambda (ou ao this como referência). Normalmente, quando o controle deixa o escopo de uma variável, a variável não é mais válida. Mas e se um delegate faz referencia a uma variável local e depois essa é retornada pela chamada do método? Agora, o delegate tem uma vida mais longa do que a variável. Para corrigir isso, o compilador gera código que faz com que a vida da variável capturada esteja ativa pelo menos enquanto o delegate estiver. Isto é chamado um closure. |
Want to create your own Flashcards for free with GoConqr? Learn more.