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 |
Sí |
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