Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Esse conteúdo é reimpresso por permissão da Pearson Education, Inc. das Diretrizes de Design da Estrutura: Convenções, Idiomas e Padrões para Bibliotecas .NET Reutilizáveis, 2ª Edição. Essa edição foi publicada em 2008, e desde então o livro foi totalmente revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
Os eventos são a forma mais usada de retornos de chamada (constructos que permitem que a estrutura chame o código do usuário). Outros mecanismos de retorno de chamada incluem membros que recebem representantes, membros virtuais e plug-ins baseados em interface. Dados de estudos de usabilidade indicam que a maioria dos desenvolvedores se sente mais confortável usando eventos do que outros mecanismos de retorno de chamada. Os eventos são bem integrados ao Visual Studio e a muitas linguagens.
É importante observar que há dois grupos de eventos: eventos gerados antes que um estado do sistema mude, chamado de pré-eventos e eventos gerados após alterações de estado, chamados de pós-eventos. Um exemplo de pré-evento seria Form.Closing, que é gerado antes de um formulário ser fechado. Um exemplo de pós-evento seria Form.Closed, que é gerado depois de um formulário ser encerrado.
✔️ Use o termo "gerar” para eventos em vez de "lançar" ou "disparar".
✔️ Recomenda-se utilizar System.EventHandler<TEventArgs>, em vez de criar manualmente novos delegados para serem usados como manipuladores de eventos.
✔️ CONSIDERE o uso de uma subclasse de EventArgs como o argumento de evento, a menos que você tenha certeza absoluta de que o evento nunca precisará levar dados para o método manipulador de eventos, nesse caso, você pode usar o tipo EventArgs diretamente.
Se você enviar uma API usando EventArgs diretamente, nunca poderá adicionar dados a serem carregados com o evento sem interromper a compatibilidade. Se você usar uma subclasse, mesmo que inicialmente completamente vazia, poderá adicionar propriedades à subclasse quando necessário.
✔️ Use um método virtual protegido para gerar cada evento. Isso só é aplicável a eventos não estáticos em classes não lacradas, não a structs, classes lacradas ou eventos estáticos.
A finalidade do método é fornecer uma maneira de uma classe derivada manipular o evento usando uma sobrescrição. A substituição é uma maneira mais flexível, rápida e natural de lidar com eventos de classe base em classes derivadas. Por convenção, o nome do método deve começar com "Ativado" e ser seguido com o nome do evento.
A classe derivada pode optar por não chamar a implementação base do método na sua sobrescrição. Prepare-se para isso não incluindo nenhum processamento no método necessário para que a classe base funcione corretamente.
✔️ Defina um parâmetro para o método protegido que gera um evento.
O parâmetro deve ser nomeado e e deve ser digitado como a classe de argumento de evento.
❌ NÃO transmita nulo como remetente ao gerar um evento não estático.
✔️ Transmita nulo como remetente ao gerar um evento estático.
❌ NÃO transmita nulo como o parâmetro de dados do evento ao gerar um evento.
Você deverá passar EventArgs.Empty se não quiser passar dados para o método de tratamento de eventos. Os desenvolvedores esperam que esse parâmetro não seja nulo.
✔️ CONSIDERE a geração de eventos que o usuário final pode cancelar. Isso só se aplica a pré-eventos.
Use System.ComponentModel.CancelEventArgs ou sua subclasse como o argumento de evento para permitir que o usuário final cancele eventos.
Design de manipulador de eventos personalizado
Há casos em que EventHandler<T> não é possível usar, como quando a estrutura precisa trabalhar com versões anteriores do CLR, que não dão suporte a Genéricos. Nesses casos, talvez seja necessário projetar e desenvolver um delegado de manipulador de eventos personalizado.
✔️ Use um tipo de retorno nulo para manipuladores de eventos.
Um manipulador de eventos pode invocar vários métodos de tratamento de eventos, possivelmente em vários objetos. Se os métodos de tratamento de eventos tiverem permissão para retornar um valor, haveria vários valores retornados para cada invocação de evento.
✔️ Certifique-se de usar object como tipo do primeiro parâmetro do tratador de eventos e chamá-lo de sender.
✔️ Use System.EventArgs ou sua subclasse como o tipo do segundo parâmetro do manipulador de eventos, e nomeie-o e.
❌ NÃO tem mais de dois parâmetros em manipuladores de eventos.
Partes © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso por permissão da Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition de Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 pela Addison-Wesley Professional como parte da série Microsoft Windows Development Series.