Declare los controladores de evento correctamente

Actualización: noviembre 2007

Nombre de tipo

DeclareEventHandlersCorrectly

Identificador de comprobación

CA1009

Categoría

Microsoft.Design

Cambio problemático

Motivo

Un delegado que controla un evento público o protegido no tiene la firma, el tipo de valor devuelto o los nombres de parámetro correctos.

Descripción de la regla

Los métodos controladores de eventos toman dos parámetros. El primero es de tipo System.Object y se denomina 'sender'. Éste es el objeto que provocó el evento. El segundo parámetro es de tipo System.EventArgs y se denomina 'e'. Éste son los datos asociados al evento. Por ejemplo, si se provoca el evento cuando se abre un archivo, los datos de evento contienen normalmente el nombre del archivo.

Los métodos controladores de eventos no deben devolver un valor. En el lenguaje de programación C#, esto lo indica el tipo de valor devuelto void. Un controlador de eventos puede invocar varios métodos en varios objetos. Si los métodos pudieran devolver un valor, se devolverían varios valores por cada evento y sólo estaría disponible el valor del último método invocado.

Cómo corregir infracciones

Para corregir una infracción de esta regla, corrija la firma, tipo de valor devuelto o los nombres de parámetro del delegado. Para obtener información detallada, vea los siguientes temas:

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El ejemplo siguiente muestra un delegado apropiado para controlar los eventos. Los métodos pueden invocarse mediante este controlador de eventos para utilizar la firma especificada en las Instrucciones de diseño. AlarmEventHandler es el nombre de tipo del delegado. AlarmEventArgs deriva de la clase base para los datos de eventos, EventArgs, y contiene datos de eventos de alarma.

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);
}

Reglas relacionadas

Revisar los controladores de eventos visibles

Vea también

Conceptos

Eventos y delegados

Referencia

System.EventArgs

System.Object