Action Delegate
Os Action delegate encapsulam métodos que não possuem nenhum retorno e aceitam zero ou até quatro paramêtros. A sua assinatura é encontrada no System namespace.
C#:
| using System;
|
| using System.Collections.Generic;
|
| using System.Linq;
|
| using System.Text;
|
|
|
| namespace ConsoleApplication1
|
| {
|
| class Program
|
| {
|
|
|
| public class Pessoa
|
| {
|
| private string _nome;
|
|
|
| public string nome
|
| {
|
| get { return _nome; }
|
| set { _nome = value; }
|
| }
|
|
|
| private int _idade;
|
|
|
| public int idade
|
| {
|
| get { return _idade; }
|
| set { _idade = value; }
|
| }
|
|
|
| bool _marcado;
|
|
|
| public bool marcado
|
| {
|
| get { return _marcado; }
|
| set { _marcado = value; }
|
| }
|
| }
|
|
|
| static void Main(string[] args)
|
| {
|
|
|
| // Declarando um simples delegate
|
| Action<Pessoa> action = EscrevaNome;
|
|
|
| // Criando nossa lista de pessoas
|
| List<Pessoa> vetPessoa = new List<Pessoa>{
|
| new Pessoa{ nome="Pessoa 1", idade=15},
|
| new Pessoa{ nome="Pessoa 2", idade=18},
|
| new Pessoa{ nome="Pessoa 3", idade=24},
|
| new Pessoa{ nome="Pessoa 4", idade=10},
|
| new Pessoa{ nome="Pessoa 5", idade=13}
|
| };
|
|
|
| // Chamando nosso delegate
|
| vetPessoa.ForEach(action);
|
|
|
|
|
| // Vamos supor que gostariamos marcar todas as pessoas que tem mais de 15 anos
|
| vetPessoa.FindAll(p => p.idade > 15).ForEach(p => p.marcado = true);
|
|
|
| // Primeiro utilizamos o método FindAll que aceita um Predicate para fazer o filtro
|
| // e depois, usamos o ForEach que aceita uma action para realizar o trabalho
|
|
|
|
|
| }
|
|
|
| public static void EscrevaNome(Pessoa p)
|
| {
|
| Console.WriteLine(p.nome);
|
| }
|
| }
|
|
|
|
|
| } |