//a assinatura do método tem que bater com a do delegete event (retorno sempre void e recebem um object e os argumentos dos eventos private void QuandoExcederDecibeis(object sender, EventArgs e) { //Assim é póssivel passar informação entre a classe que executa o evento e a classe assinante do evento ExcessoDecibeisEventArgs eventArgs = (ExcessoDecibeisEventArgs)e; MessageBox.Show(string.Format("O cachorro passou dos limites, com {0} decibéis.", eventArgs.IntensidadeLatidos), "Excesso de decibéis", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
//Quando o evento ocorrer, os dois métodos abaixo serão chamados, porque eles assinaram para o evento. private void QuandoExcederDecibeis(object sender, EventArgs e) { ExcessoDecibeisEventArgs eventArgs = (ExcessoDecibeisEventArgs)e; MessageBox.Show(string.Format("O cachorro passou dos limites com {0} dB.", eventArgs.IntensidadeLatido), "Excesso de decibéis", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
public frmGerenciadorLatidosCachorros() { InitializeComponent(); _gerenciadorLatidos = new GerenciadorLatidos(); /* A implementação abaixo foi comentada para dar lugar ao uso de expressões lambda, * implementadas no trecho abaixo dos comentários. * //Ao instanciar a classe do gerenciador, métodos desta classe assinam o evento, no padrão * //já visto dos delegates. * _gerenciadorLatidos.ExcessoDecibeisEvent += QuandoExcederDecibeis; * _gerenciadorLatidos.ExcessoDecibeisEvent += QuandoExcederDecibeisDeNovo; */ /* As linhas abaixo foram criadas na aula sobre expressões lambda, mais especificamente, métodos * anônimos. Aqui, as linhas que estão comentadas acima foram substituídas pela implementação abaixo, * onde se cria diretamente a lógica do método com um método anônimo. Desta forma, os métodos * QuandoExcederDecibeis e QuandoExcederDecibeisDeNovo nunca são chamados e poderiam ser apagados. * A vantagem disso é justamente tornar o código mais limpo e uma classe não tão cheia de métodos. */ _gerenciadorLatidos.ExcessoDecibeisEvent += (sender, args) => { ExcessoDecibeisEventArgs eventArgs = (ExcessoDecibeisEventArgs)args; MessageBox.Show(string.Format("O cachorro passou dos limites com {0} dB.", eventArgs.IntensidadeLatido), "Excesso de decibéis", MessageBoxButtons.OK, MessageBoxIcon.Warning); }; _gerenciadorLatidos.ExcessoDecibeisEvent += (sender, args) => { MessageBox.Show("Você será multado", "Excesso de decibéis", MessageBoxButtons.OK, MessageBoxIcon.Warning); }; }
public int Latir() { _intensidadeLatido += 10; if (_intensidadeLatido > 80) { ExcessoDecibeisEventArgs e = new ExcessoDecibeisEventArgs { IntensidadeLatido = _intensidadeLatido }; OnExcessoDecibeis(e); } return(_intensidadeLatido); }
public frmGerenciadorLatidos() { InitializeComponent(); _gerenciadorLatidos = new GerenciadorLatidos(); _gerenciadorLatidos.ExcessoDecibeisEvent += (sender, args) => { ExcessoDecibeisEventArgs eventArgs = (ExcessoDecibeisEventArgs)args; MessageBox.Show(string.Format("O cachorro passou dos limites, com {0} decibeis. ", eventArgs.IntensidadeLatido, "Excesso de decibéis", MessageBoxButtons.OK, MessageBoxIcon.Warning)); }; _gerenciadorLatidos.ExcessoDecibeisEvent += (sender, args) => { MessageBox.Show("Você acbou de levar uma multa ", "Excesso de decibéis", MessageBoxButtons.OK, MessageBoxIcon.Warning); }; }
public int Latir() { if (_intensidadeLatido != 100) { _intensidadeLatido += 10; } //a lógica que chama o método OnExcessoDecibeis fica aqui e não no proprio evento //pq a responsabilidade do método OnExcessoDecibeis é de apenas disparar o evento (S do SOLID ;) ) if (_intensidadeLatido > 80) { ExcessoDecibeisEventArgs e = new ExcessoDecibeisEventArgs { IntensidadeLatidos = _intensidadeLatido }; //chamando o método que dispara o evento OnExcessoDecibeis(e); } return(_intensidadeLatido); }
public int Latir() { _intensidadeLatido += 10; if (_intensidadeLatido > 80) { //O método onde se deseja que o evento aconteça chama o método auxiliar de disparo. /* Caso se deseje gerar um evento, sem qualquer parâmetro, declara-se o new EventArgs() * na chamada do método * OnExcessoDecibeis(new EventArgs()); */ /* Caso seja preciso fornecer parâmetros ao evento, é preciso criar uma classe que * herde EventArgs, e programá-la como desejado. No caso deste exemplo, é a classe * ExcessoDecibeisEventArgs */ ExcessoDecibeisEventArgs e = new ExcessoDecibeisEventArgs { IntensidadeLatido = _intensidadeLatido }; OnExcessoDecibeis(e); } return(_intensidadeLatido); }