none
C# Qual a diferença afinal de DELEGATES para EVENTOS ? RRS feed

  • Pergunta

  • Boa Noite,

    Eu ando lendo diversos sites e vídeos, mesmo assim não consigo compreender do uso de eventos ao envés de delegates, poderiam me explicar ambos? mais concentrado no uso dos eventos.

    Eu sei que delegates suportam as refêrencias aos métodos, de acordo com a sua assinatura. Podendo chama-lo como um método e assim, todos os métodos seriam convocados.

    Agora dos eventos, eles necessitam dos delegates para funcionarem, entretanto, ai que entra a minha dúvida, eles também suportam refêrencia á métodos e podem ser convocados como um da mesma forma como um delegate seria chamado.

    Observe abaixo:

    class Principal
    {
     public delegate void Login(string nick, int id);
     public Login Player = null;
    
     public event Login eventoPlayer = null;
    
     static void Main(string[] args)
     {
      try
      {
       Principal convoDelegate = new Principal();
       convoDelegate.Player = delegate(string nick, int id)
       {
        Console.WriteLine(":: Player {0} está logando com o ID {1} - Delegate disparado.",nick , id);
       };
    
      Principal convoEvento = new Principal();
      convoEvento.eventoPlayer = delegate(string nick, int id)
      {
       Console.WriteLine(":: Player {0} está logando com o ID {1} - Evento disparado.", nick, id);
      };
    
      // Chamar o delegate, ele não é estatico portanto, chamamos a refêrencia do objeto primeiro.
      convoDelegate.Player.Invoke("Teste-Delegate", 0);
                    // Chamar o evento , para demonstrar a duvida que fazem a mesma coisa.
      convoEvento.eventoPlayer.Invoke("Teste-Evento", 0);
    
     }
     catch (Exception ex)
     {
      Console.WriteLine(":: ERRO " + ex.Message);
     }
    Console.WriteLine(":: Fim do programa, pressione qualquer tecla...");
    Console.ReadKey();
    } 

    Alguém poderia me explicar seus usos e diferenças entre eles? obrigado !

    quinta-feira, 2 de novembro de 2017 23:26

Respostas

  • É uma questao complexa de se responder. Vou deixar alguns artigos para que voce tenha mais material.

    Basicamente (segundo o Macoratti) a diferença é:

    "Um delegate é um elemento da linguagem C# que permite que você faça referência a um método."

    "Events em C# são uma maneira de uma classe fornecer notificações aos usuários da classe quando alguma coisa ocorre com o objeto da classe e que utilizam os delegates para fazer a comunicação entre as mensagens da aplicação e os nosso métodos."

    fonte: http://www.macoratti.net/11/05/c_dlg1.htm

    Eu diria que Evento é uma aplicacao direta do observer pattern (https://pt.wikipedia.org/wiki/Observer) que usa delegates para sua implementaçao.


    Alguns outros links:

    http://csharpindepth.com/Articles/Chapter2/Events.aspx

    http://blog.monstuff.com/archives/000040.html


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".



    sexta-feira, 3 de novembro de 2017 13:57
    Moderador