Questa documentazione è stata archiviata e non viene gestita.

Classe EventInfo

Aggiornamento: novembre 2007

Individua gli attributi di un evento e consente di accedere ai relativi metadati.

Spazio dei nomi:  System.Reflection
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public abstract class EventInfo : MemberInfo, 
	_EventInfo
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
/** @attribute PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust") */
public abstract class EventInfo extends MemberInfo implements _EventInfo
public abstract class EventInfo extends MemberInfo implements _EventInfo

Utilizzare la classe EventInfo per esaminare gli eventi e per associare i gestori eventi, come illustrato nel codice di esempio per il metodo AddEventHandler.

Nota:

EventInfo non è destinato all'utilizzo per generare eventi. La generazione di eventi da parte di un oggetto dipende dal relativo stato interno.

Gli eventi sono utilizzati con i delegati. Un listener di eventi crea un'istanza di un delegato del gestore eventi che viene richiamato ogni volta che l'evento viene generato da un'origine eventi. Per connettersi all'origine eventi, il listener di eventi aggiunge questo delegato all'elenco chiamate sull'origine. Quando l'evento viene generato, viene chiamato il metodo Invoke del delegato del gestore eventi. Sono supportate le notifiche di evento multicast e singlecast. I metodi Add e Remove, nonché la classe del delegato del gestore eventi associata a un evento, devono essere contrassegnati nei metadati.

I delegati sono puntatori a funzione orientati ad oggetti. In C o C++, un puntatore a funzione è un riferimento a un metodo. A differenza del puntatore a funzione C o C++, un delegato contiene due riferimenti: uno a un metodo e l'altro a un oggetto che supporta il metodo. I delegati possono richiamare un metodo senza conoscere il tipo di classe che dichiara o eredita il metodo. Nel caso dei delegati, è sufficiente conoscere il tipo restituito e l'elenco di parametri del metodo.

Il modello di eventi funziona correttamente per i delegati singlecast e multicast. Quando il metodo Invoke del delegato viene chiamato, un solo oggetto avrà un metodo chiamato su di esso. Un modificatore multicast può essere applicato a una dichiarazione Delegate, che consente la chiamata di più metodi quando viene chiamato il metodo Invoke del delegato.

La chiamata del metodo ICustomAttributeProvider.GetCustomAttributes su EventInfo quando il parametro inherit di GetCustomAttributes è true non segue la gerarchia dei tipi. Utilizzare System.Attribute per ereditare gli attributi personalizzati.

Note per gli eredi:

Quando si eredita da EventInfo, è necessario eseguire l'override dei seguenti membri: GetAddMethod, GetRemoveMethod e GetRaiseMethod.

Nell'esempio di codice riportato di seguito si ottiene un oggetto EventInfo per l'evento Click della classe Button.

using System;
using System.Reflection;
using System.Security;

class MyEventExample
{
    public static void Main()
    {  
        try
        {

            // Creates a bitmask based on BindingFlags.
            BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
            Type myTypeBindingFlags = typeof(System.Windows.Forms.Button);
            EventInfo myEventBindingFlags = myTypeBindingFlags.GetEvent("Click", myBindingFlags);
            if(myEventBindingFlags != null)
            {
                Console.WriteLine("Looking for the Click event in the Button class with the specified BindingFlags.");
                Console.WriteLine(myEventBindingFlags.ToString());
            }
            else
                Console.WriteLine("The Click event is not available with the Button class.");
        }
        catch(SecurityException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("The following exception was raised : {0}",e.Message);
        }
    }
}


import System.*;
import System.Reflection.*;
import System.Security.*;

class MyEventExample
{
    public static void main(String[] args)
    {
        try {
            // Creates a bitmask based on BindingFlags.
            BindingFlags myBindingFlags = BindingFlags.Instance
                | BindingFlags.Public | BindingFlags.NonPublic;
            Type myTypeBindingFlags = System.Windows.Forms.Button.class.ToType();
            EventInfo myEventBindingFlags = myTypeBindingFlags.GetEvent("Click",
                myBindingFlags);
            if (myEventBindingFlags != null) {
                Console.WriteLine("Looking for the Click event in the Button"
                    + " class with the specified BindingFlags.");
                Console.WriteLine(myEventBindingFlags.ToString());
            }
            else {
                Console.WriteLine("The Click event is not available with the"
                    + " Button class.");
            }
        }
        catch (SecurityException e) {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :" + e.get_Message());
        }
        catch (ArgumentNullException e) {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :" + e.get_Message());
        }
        catch (System.Exception e) {
            Console.WriteLine("The following exception was raised : {0}",
                e.get_Message());
        }
    } //main
} //MyEventExample


Questo tipo è thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile per Smartphone, Windows Mobile per Pocket PC, Xbox 360

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supportato in: 3.5, 2.0, 1.0

XNA Framework

Supportato in: 2.0, 1.0
Mostra: