CA1009: Dichiarare correttamente i gestori eventi
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". Corrisponde all'oggetto che ha generato l'evento. Il secondo parametro è di tipo System.EventArgs ed è denominato "e". Questi sono i 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.
Come correggere le 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 seguente viene illustrato un delegato adatto per la gestione di eventi. I metodi che possono essere richiamati da questo gestore dell'evento 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
CA2109: Controllare i gestori di eventi visibili