CA1009: declarar manipuladores de eventos corretamente
TypeName |
DeclareEventHandlersCorrectly |
CheckId |
CA1009 |
Categoria |
Microsoft.Design |
Alteração Significativa |
Quebra |
Causa
Um representante que manipula um público ou um evento protegido não tem a assinatura, o tipo de retorno, ou nomes de parâmetro corretos.
Descrição da Regra
Os métodos do manipulador de eventos usam dois parâmetros.O primeiro é do tipo Object e é denominado “remetente”.Este é o objeto que gerou o evento.O segundo parâmetro é do tipo EventArgs e é denominado “e”.Estes são os dados associados ao evento.Por exemplo, se o evento é gerado sempre que um arquivo é aberto, os dados de evento normalmente contêm o nome do arquivo.
Os métodos do manipulador de eventos não devem retornar um valor.Na linguagem de programação C#, isso é indicado por tipo de retorno void.Um manipulador de eventos pode chamar vários métodos em vários objetos.Se os métodos eram permitidos retornar um valor, vários valores de retorno se para cada evento, e apenas o valor do método mais recente que foi invocado estariam disponíveis.
Como Corrigir Violações
Para corrigir uma violação desta regra, corrija a assinatura, o tipo de retorno, ou nomes de parâmetro de delegação.Para obter detalhes, consulte o exemplo.
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo
O exemplo a seguir mostra um delegado que é indicado para tratar eventos.Os métodos que podem ser chamadas pelo manipulador de eventos seguem à assinatura que é especificada nas diretrizes de design.AlarmEventHandler é o nome do tipo delegado.AlarmEventArgs é derivado da classe base de dados do evento, EventArgs, e as propriedades alarmam dados do evento.
Imports System
Namespace DesignLibrary
Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
Public Class AlarmEventArgs
Inherits EventArgs
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class AlarmEventArgs : EventArgs {}
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
}
using namespace System;
namespace DesignLibrary
{
public ref class AlarmEventArgs : public EventArgs {};
public delegate void AlarmEventHandler(
Object^ sender, AlarmEventArgs^ e);
}
Regras Relacionadas
CA2109: revisar manipuladores de eventos visíveis