static void Main(string[] args) { // Instancia um objeto publicador de evento Classe_Publisher publisher = new Classe_Publisher(); // Instancia um objeto de assinante de evento Classe_Subscriber subscriber = new Classe_Subscriber(); // Inscreva no evento publisher.EventName criando o método subscriber.OnMethodName // um destino do delegado publisher.EventName publisher.EventName += subscriber.OnMethodName; // Chama o método ChecarAlgo no objeto publisher // chamará o delegado publisher.EventName se o saldo for superior a 250 publisher.ChecarAlgo(251); Console.WriteLine(); Console.WriteLine("======TESTE: classe Room====="); Room room = new Room(); // Instancia um objeto de assinante de evento Room_Subscriber room_subscriber = new Room_Subscriber(); room.EventName += room_subscriber.OnMethodName; room.EventName += room_subscriber.OnShow; room.EventName += room_subscriber.OnDisplay; room.Temperature = 90; room.Temperature = 15; Console.ReadKey(); }
static void Main(string[] args) { // Instancia um objeto publicador de evento Classe_Publisher publisher = new Classe_Publisher(); // Instancia um objeto de assinante de evento Classe_Subscriber subscriber = new Classe_Subscriber(); // Inscreva no evento publisher.EventName criando o método subscriber.OnMethodName // um destino do delegado publisher.EventName publisher.EventName += subscriber.OnMethodName; // Chama o método ChecarAlgo no objeto publisher // chamará o delegado publisher.EventName se o saldo for superior a 250 publisher.ChecarAlgo(251); //O EVENTO trata esses 2 problemas dos delegates //1. Qualquer um pode usar um operador de atribuição // que pode sobrescrever as referências de métodos. Console.WriteLine(); Console.WriteLine("======Problema delegate: Sobrescreve metodo associados======"); Action act = Display; act += Show; act += Display; act(); Action act_erro = Display; act_erro += Show; Console.WriteLine("Aqui não tem o +"); act_erro = Display; act_erro(); //2. O delegado pode ser chamado em qualquer lugar do código, // o que pode violar a regra do encapsulamento. Console.WriteLine(); Console.WriteLine("======Problema delegate: Pode ser chamado em qualquer lugar do código======"); Room room = new Room(); room.OnHeatAlert = Alarm; // Instancia um objeto de assinante de evento Room_Subscriber room_subscriber = new Room_Subscriber(); room.EventName += room_subscriber.OnMethodName; room.EventName += room_subscriber.OnShow; room.EventName += room_subscriber.OnDisplay; room.EventName += room_subscriber.OnShow; //NÃO é possível sobrescrever as referências de métodos. //room.EventName = room_subscriber.OnShow; // OnHeatAlert será chamado room.Temperature = 90; room.Temperature = 15; // OnHeatAlert será chamado novamente o que não deveria ocorrer // porque o quarto não está quente (temp> 60) no set do valor Temperature // Temperature é propriedade de Room. Delegado é chamado fora da classe Room room.OnHeatAlert(room.Temperature); Console.WriteLine("======RESOLVIDO Problemas de delegate COM EVENTOS======"); Console.ReadKey(); }