![]() |
Created by Thiago Russo
over 8 years ago
|
|
Question | Answer |
O que são "events" em C#? | Um padrão de projeto popular é o "publish-subscribe". Vc se inscreve em um evento e, em seguida, vc será notificado qdo o publicador do evento levanta (raises) um novo evento. Isso é utilizado para estabelecer o acoplamento fraco entre os componentes em uma aplicação. Delegates formam a base para o sistema de eventos em C#. |
exemplo de "Using an Action to expose an event" | |
Apesar do código anterior funcionar, ele apresenta 2 falhas. Quais são? O que o C# oferece para evitar essas falhas? | 1) Se alterar a linha de assinatura do método 2 para "=" ao invés de "+=", o método 1 será excluído. 2) A classe Pub gera o evento. No entanto, nada impede que os usuários fora da classe de invocar o evento chamando p.OnChange () Para superar essas falha, a linguagem C# usa a palavra-chave event |
exemplo usando a palavra-chave "event" O que muda para o código anterior? |
Image:
Event Keyword (image/png)
|
evoluindo a solução com "EventHandler" explicação | Tem + uma mudança q vc ainda precisa fazer p/ seguir as convenções de codificação do .NET Framework. Em vez de usar o tipo Action para o seu evento, você deve usar o EventHandler ou EventHandler <T>. EventHandler é declarado como o seguinte delegate: public event EventHandler<MyArgs> OnChange = delegate { }; Por padrão, ele leva um objeto sender e alguns argumentos do evento. O sender é por convenção o objeto que invoca o evento (ou nulo caso se trate de um método estático). Usando EventHandler <T>, você pode especificar o tipo de argumentos de evento que você deseja usar. |
exemplo com "EventHandler" |
Image:
Event Handler (image/png)
|
Personalizando a adição e remoção de assinantes com "event accessor" | |
events são delegates? | Se usar a sintaxe regular do event, o compilador gera o assessor para você. Isso deixa claro que os eventos não são delegates; em vez disso eles são um invólucro conveniente ao redor delegates. Delegates são executados em uma ordem sequencial. Geralmente, os delegates são executadas na ordem em que foram adicionados, embora isto não é algo que é especificado dentro do Common Language Infrastructure (CLI), então você não deve depender disso. |
exemplo de exception em um dos métodos assinantes | |
Exemplo de tratar exceções de eventos manualmente (Classe Pub) | |
Exemplo de tratar exceções de eventos manualmente (chamando a Classe Pub) |
Want to create your own Flashcards for free with GoConqr? Learn more.