Condividi tramite


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

Vedere anche

Concetti

Eventi e delegati

Riferimenti

System.EventArgs

System.Object