Condividi tramite


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

Vedere anche

Riferimenti

System.EventArgs

System.Object

Concetti

Eventi e delegati