Desenvolvimento - C#
Delegates e eventos no C# 2.0 - Parte 2
Nesta segunda parte neste "passeio" pelos delegates e eventos no C# 2.0, veremos um exemplo prático usando EventArgs em um sistema de conta bancária, onde temos uma simples operação de débito.
por Rodolfo PaoniNesta segunda parte neste "passeio" pelos delegates e eventos no C# 2.0, veremos um exemplo prático usando EventArgs em um sistema de conta bancária, onde temos uma simples operação de débito.
public class SaldoNaoDisponivelEventArgs : EventArgs
{
public
SaldoNaoDisponivelEventArgs(decimal saldoAtual, decimal valorRequisitado)
{
this._saldoAtual
= saldoAtual;
this._valorRequisitado = valorRequisitado;
}
private decimal _saldoAtual;
public decimal SaldoAtual
{
get { return
_saldoAtual; }
set {
_saldoAtual = value; }
}
private decimal _valorRequisitado;
public decimal ValorRequisitado
{
get { return
_valorRequisitado; }
set {
_valorRequisitado = value; }
}
}
A nossa intenção é saber exatamente qual o saldo e o valor requisitado na conta quando o saldo for insuficiente para realizar o débito. Customizamos nosso EventArgs criando nossa própria classe e definindo os parâmetros necessários para saber o saldo e o valor que foi solicitado para débito.
public delegate void
SaldoNaoDisponivelEventHandler(object sender, SaldoNaoDisponivelEventArgs e);
public event SaldoNaoDisponivelEventHandler
SaldoNaodisponivel;
public class Conta
{
private decimal _saldo;
public decimal Saldo
{
get { return
_saldo; }
set { _saldo
= value; }
}
public Conta(decimal saldo)
{
this._saldo
= saldo;
}
public void Debita(decimal valor)
{
if (valor
<= Saldo)
{
Saldo -= valor;
}
else
{
SaldoNaodisponivel(this, new SaldoNaoDisponivelEventArgs(Saldo, valor));
}
}
}
Nesta classe criamos um delegate que define como valor de tetorno void e recebe um parâmetro object, que seria a classe que disparou o evento e o nosso EventArgs customizado SaldoNaoDisponivelEventArg. A partir daí, criamos um evento do tipo do delegate chamdo SaldoNaoDisponivelEventHandler. Este evento será disparado na operação de débito, quando o saldo não for suficiente para realizar o débito solicitado.
class Program
{
static void
Conta_SaldoNaoDisponivel(object sender, SaldoNaoDisponivelEventArgs e)
{
Console.WriteLine("Saldo
atual = {0:C}\nValor requisitado = {1:C}",
e.SaldoAtual,
e.ValorRequisitado);
}
static void Main(string[] args)
{
Conta c =
new Conta(1000);
c.SaldoNaodisponivel += new
SaldoNaoDisponivelEventHandler(Conta_SaldoNaoDisponivel);
c.Debita(200); // Restam 800
c.Debita(600);// Restam 200
c.Debita(500);// Gera o Evento
Console.ReadKey();
}
}
Nesta classe principal, instanciamos o evento, que é do tipo do delegate e apontamos para o método que tratará o evento de quando o saldo não for disponível. Inicialmente depositamos o valor 1000 e depois vamos retirando valores. Na última linha tentamos debitar 500, mas o saldo é de 200, daí é disparado o evento e como o evento está sendo tratado, ele será apontado para o método "Conta_SaldoNaoDisponivel", onde saberemos exatamente qual o valor que foi requisitado e o saldo quando o valor disponível para débito na conta era insuficiente.
Por hoje é só. Até a próxima!