Dichiarare correttamente i gestori eventi
Aggiornamento: novembre 2007
TypeName |
DeclareEventHandlersCorrectly |
CheckId |
CA1009 |
Category |
Microsoft.Design |
Breaking Change |
Breaking |
Causa
Un delegato che gestisce un evento pubblico o protetto non dispone della firma, del tipo restituito o dei nomi di parametri corretti.
Descrizione della regola
I metodi di gestione eventi accettano due parametri. Il primo è di tipo System.Object ed è denominato "sender". Si tratta dell'oggetto che ha generato l'evento. Il secondo parametro è di tipo System.EventArgs ed è denominato "e". Si tratta dei dati associati all'evento. Se ad esempio l'evento viene generato ogni volta che viene aperto un file, i dati dell'evento conterranno il nome del file.
I metodi di gestione eventi non devono restituire un valore. Nel linguaggio di programmazione C#, viene indicato dal tipo restituito void. Un gestore eventi può richiamare più metodi in più oggetti. Se ai metodi fosse consentito restituire un valore, sarebbero presenti più valori restituiti per ogni evento e solo il valore dell'ultimo metodo richiamato sarebbe disponibile.
Correzione di violazioni
Per correggere una violazione di questa regola, correggere la firma, il tipo restituito o i nomi di parametri del delegato. Per informazioni dettagliate, vedere l'esempio riportato di seguito.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito viene illustrato un delegato appropriato per la gestione di eventi. I metodi che è possibile richiamare da questo gestore eventi sono conformi alla firma specificata nelle linee guida di progettazione. AlarmEventHandler è il nome del tipo del delegato. AlarmEventArgs deriva dalla classe base per i dati degli eventi, EventArgs, e contiene i dati degli eventi di allarme.
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);
}
Regole correlate
Controllare i gestori di eventi visibili