cada status informado e um outro para recuperar a quantidade atual de litros no tanque. Por conversao, deve-se colocar a palavra EventHandle no final do nome de cada delegate que sera um tipo para um evento. Entao, os delegates da classe serao estes: // Delegate para um metodo simples de exibicao de status public delegate void InformacoesCarroEventHandle(); // Delegate para um metodo que utiliza a propriedade LitrosNoTanque, // atraves da variavel inteira passada como parametro no metodo // para informar tal status ao usuario public delegate void InformacaoTanqueEventHandle(int litrosNoTanque);- Pronto, nossos delegates foram declarados.-Teremos um evento para cada notificacao desejada. A sintaxe de declaracao e a seguinte: // Evento para notificar que o carro ligou public event InformacoesCarroEventHandle CarroLigado; // Evento para notificar que o carro desligou public event InformacoesCarroEventHandle CarroDesligado; // Evento para notificar que o carro esta em movimento public event InformacoesCarroEventHandle CarroEmMovimento; // Evento para notificar que o carro parou public event InformacoesCarroEventHandle CarroParado; // Evento para notificar que o carro esta sem gasolina public event InformacoesCarroEventHandle TanqueVazio; // Evento para notificar a quantidade de litros no tanque public event InformacaoTanqueEventHandle QuantidadeLitrosNoTanque;- Nossa classe Carro tera um construtor que informara a quantidade de gasolina inserida no tanque do carro: // Contrutor do objeto. Inicializa a propriedade LitrosNoTanque public Carro(int litrosNoTanque) { this.LitrosNoTanque = litrosNoTanque; }- O primeiro metodo e de ligar. Observe que, se o carro estiver ligado ou sem gasolina tal status e notificado pelo seu evento especifico e, assim que o carro e ligado, o evento de notificacao e chamado: // Efetua verificacoes e liga o carro public void Ligar() { if (this.StatusLigado) { this.CarroLigado(); return; } if (this.LitrosNoTanque.Equals(0)) { this.TanqueVazio(); return; } this.StatusLigado = true; this.CarroLigado(); }- Da mesma forma acontece com o metodo desligar: // Efetua validacoes e desliga o carro public void Desligar() { if (!this.StatusLigado) { this.CarroDesligado(); return; } this.StatusLigado = false; this.CarroDesligado(); }- O processo de movimentar o carro possui mais detalhes. Apos dar a partida no carro inicia o processo de consumo de combustivel que tambem e notificado com seu evento: // Efetua validacoes e dar a partida no carro. Da a partira no carro // e inicia o processo de consumo de gasolina public void Partir() { if (!this.StatusLigado) { this.CarroDesligado(); return; } if (this.LitrosNoTanque.Equals(0)) { this.TanqueVazio(); return; } this.StatusMovimento = true; this.CarroEmMovimento(); while (this.LitrosNoTanque > 0) { System.Threading.Thread.Sleep(1000); this.LitrosNoTanque--; this.QuantidadeLitrosNoTanque(LitrosNoTanque); if (LitrosNoTanque.Equals(0) || !this.StatusLigado) { this.TanqueVazio(); this.Parar(); this.Desligar(); break; } } }- E por fim, o metodo de parar: // Efetua validacoes e para o carro public void Parar() { if (!this.StatusLigado) { this.CarroDesligado(); return; } if (!this.StatusMovimento) { this.CarroParado(); return; } this.StatusMovimento = false; this.CarroParado(); } }-Nossa classe Carro esta pronta. Precisamos agora utiliza-la em nossa windows application. Volte para a janela e pressione F7 para exibir seu CodeBehind.- No topo da classe declare uma propriedade dinamica da classe Carro. Logo abaixo, no construtor da janela, instancie o nosso carro e crie os event handles de notificacoes: public Carro Palio { get; set; } public Form1() { InitializeComponent(); this.Palio = new Carro(20); Palio.CarroLigado += new Carro.InformacoesCarroEventHandle(Palio_CarroLigadoEventHandle); Palio.CarroDesligado +=