Type.GetEvent Metodo

Definizione

Ottiene un evento specifico dichiarato o ereditato dall'oggetto Type corrente.

Overload

GetEvent(String, BindingFlags)

Quando ne viene eseguito l'override in una classe derivata, restituisce l'oggetto EventInfo che rappresenta l'evento specificato, usando i vincoli di associazione specificati.

GetEvent(String)

Restituisce l'oggetto EventInfo che rappresenta l'evento pubblico specificato.

GetEvent(String, BindingFlags)

Quando ne viene eseguito l'override in una classe derivata, restituisce l'oggetto EventInfo che rappresenta l'evento specificato, usando i vincoli di associazione specificati.

public:
 abstract System::Reflection::EventInfo ^ GetEvent(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.EventInfo? GetEvent (string name, System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.EventInfo GetEvent (string name, System.Reflection.BindingFlags bindingAttr);
abstract member GetEvent : string * System.Reflection.BindingFlags -> System.Reflection.EventInfo
Public MustOverride Function GetEvent (name As String, bindingAttr As BindingFlags) As EventInfo

Parametri

name
String

Stringa contenente il nome di un evento dichiarato o ereditato dall'oggetto Type corrente.

bindingAttr
BindingFlags

Combinazione bit per bit di valori di enumerazione che specifica il modo in cui viene eseguita la ricerca.

-oppure- Default per restituire null.

Restituisce

EventInfo

Oggetto che rappresenta l'evento specificato dichiarato o ereditato dall'oggetto Type corrente, se disponibile; in caso contrario, null.

Implementazioni

Eccezioni

name è null.

Esempio

Nell'esempio di codice seguente viene utilizzato il metodo per cercare in un tipo un evento pubblico o non pubblico denominato "Click" che non è GetEvent(String, BindingFlags) static ( in Shared Visual Basic).

#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Windows::Forms;

int main()
{
   try
   {
      // Creates a bitmask based on BindingFlags.
      BindingFlags myBindingFlags = static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public | BindingFlags::NonPublic);
      Type^ myTypeBindingFlags = System::Windows::Forms::Button::typeid;
      EventInfo^ myEventBindingFlags = myTypeBindingFlags->GetEvent( "Click", myBindingFlags );
      if ( myEventBindingFlags != nullptr )
      {
         Console::WriteLine( "Looking for the Click event in the Button class with the specified BindingFlags." );
         Console::WriteLine( myEventBindingFlags );
      }
      else
            Console::WriteLine( "The Click event is not available with the Button class." );
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The following exception was raised : {0}", e->Message );
   }
}
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);
        }
    }
}
Imports System.Reflection
Imports System.Security

' Compile this sample using the following command line:
' vbc type_getevent.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class MyEventExample
    Public Shared Sub Main()
        Try
            ' Creates a bitmask comprising  BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public _
                                                 Or BindingFlags.NonPublic
            Dim myTypeBindingFlags As Type = GetType(System.Windows.Forms.Button)
            Dim myEventBindingFlags As EventInfo = myTypeBindingFlags.GetEvent("Click", myBindingFlags)
            If myEventBindingFlags IsNot Nothing Then
                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.")
            End If
        Catch e As SecurityException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As Exception
            Console.WriteLine("The following exception was raised : {0}", e.Message)
        End Try
    End Sub
End Class

Commenti

I flag BindingFlags di filtro seguenti possono essere usati per definire gli eventi da includere nella ricerca:

  • È necessario specificare BindingFlags.Instance o per ottenere un valore BindingFlags.Static restituito.

  • Specificare BindingFlags.Public per includere gli eventi pubblici nella ricerca.

  • Specificare per includere nella ricerca eventi non pubblici, ovvero eventi privati, interni BindingFlags.NonPublic e protetti.

  • Specificare BindingFlags.FlattenHierarchy per includere i membri public protected statici e verso l'alto nella gerarchia. I private membri statici nelle classi ereditate non sono inclusi.

Per modificare BindingFlags il funzionamento della ricerca, è possibile usare i flag di modifica seguenti:

  • BindingFlags.IgnoreCase per ignorare la distinzione tra maiuscole e name minuscole.

  • BindingFlags.DeclaredOnly per cercare solo gli eventi dichiarati in Type , non gli eventi semplicemente ereditati.

Per altre informazioni, vedere System.Reflection.BindingFlags.

Un evento viene considerato pubblico per la reflection se ha almeno un metodo o una funzione di accesso pubblica. In caso contrario, l'evento è considerato privato ed è necessario usare | | (in Visual Basic combinare i valori usando ) per BindingFlags.NonPublic BindingFlags.Instance BindingFlags.Static Or ottenerlo.

Se l'oggetto corrente rappresenta un tipo generico costruito, questo metodo restituisce con Type i parametri di tipo EventInfo sostituiti dagli argomenti di tipo appropriati.

Se l'oggetto corrente rappresenta un parametro di tipo nella definizione di un tipo o di un metodo generico, questo metodo cerca gli Type eventi del vincolo di classe.

Vedi anche

Si applica a

GetEvent(String)

Restituisce l'oggetto EventInfo che rappresenta l'evento pubblico specificato.

public:
 System::Reflection::EventInfo ^ GetEvent(System::String ^ name);
public:
 virtual System::Reflection::EventInfo ^ GetEvent(System::String ^ name);
public System.Reflection.EventInfo? GetEvent (string name);
public System.Reflection.EventInfo GetEvent (string name);
member this.GetEvent : string -> System.Reflection.EventInfo
abstract member GetEvent : string -> System.Reflection.EventInfo
override this.GetEvent : string -> System.Reflection.EventInfo
Public Function GetEvent (name As String) As EventInfo

Parametri

name
String

Stringa contenente il nome di un evento dichiarato o ereditato dall'oggetto Type corrente.

Restituisce

EventInfo

Oggetto che rappresenta l'evento pubblico specificato dichiarato o ereditato dall'oggetto Type corrente, se disponibile; in caso contrario, null.

Implementazioni

Eccezioni

name è null.

Esempio

Nell'esempio seguente viene creato EventInfo un oggetto e viene ottiene l'evento per una classe di pulsanti per l'evento specificato.

#using <system.dll>
#using <system.windows.forms.dll>
#using <system.drawing.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Security;

int main()
{
   try
   {
      Type^ myType = System::Windows::Forms::Button::typeid;
      EventInfo^ myEvent = myType->GetEvent( "Click" );
      if ( myEvent != nullptr )
      {
         Console::WriteLine( "Looking for the Click event in the Button class." );
         Console::WriteLine( myEvent );
      }
      else
            Console::WriteLine( "The Click event is not available in the Button class." );
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The following exception was raised : {0}", e->Message );
   }
}
using System;
using System.Reflection;
using System.Security;

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

            Type myType = typeof(System.Windows.Forms.Button);
            EventInfo myEvent = myType.GetEvent("Click");
            if(myEvent != null)
            {
                Console.WriteLine("Looking for the Click event in the Button class.");
                Console.WriteLine(myEvent.ToString());
            }
            else
            {
                Console.WriteLine("The Click event is not available in 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);
        }
    }
}
Imports System.Reflection
Imports System.Security

' Compile this sample using the following command line:
' vbc type_getevent.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class MyEventExample
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(System.Windows.Forms.Button)
            Dim myEvent As EventInfo = myType.GetEvent("Click")
            If Not (myEvent Is Nothing) Then
                Console.WriteLine(ControlChars.Cr + "Looking for the Click event in the Button class.")
                Console.WriteLine(ControlChars.Cr + myEvent.ToString())
            Else
                Console.WriteLine("The Click event is not available with the Button class.")
            End If
        Catch e As SecurityException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As Exception
            Console.WriteLine("The following exception was raised : {0}", e.Message)
        End Try
    End Sub
End Class

Commenti

Un evento viene considerato pubblico per la reflection se ha almeno un metodo o una funzione di accesso pubblica. In caso contrario, l'evento è considerato privato ed è necessario usare | | (in Visual Basic combinare i valori usando ) per BindingFlags.NonPublic BindingFlags.Instance BindingFlags.Static Or ottenerlo.

La ricerca di fa name distinzione tra maiuscole e minuscole. La ricerca include eventi di istanza pubblica statica e pubblica.

Nella tabella seguente vengono illustrati i membri di una classe di base restituiti dai Get metodi quando si esegue la reflecting su un tipo.

Tipo di membro Static Non statico
Costruttore No No
Campo No Sì. Un campo è sempre hide-by-name-and-signature.
Evento Non applicabile La regola di sistema dei tipi comuni è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito.
Metodo No Sì. Un metodo (virtuale e non virtuale) può essere hide-by-name o hide-by-name-and-signature.
Tipo annidato No No
Proprietà Non applicabile La regola di sistema dei tipi comuni è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito.
  1. Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametro, sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.

  2. Per la reflection, le proprietà e gli eventi sono hide-by-name-and-signature. Se si dispone di una proprietà con una funzione di accesso get e una funzione di accesso set nella classe di base, ma la classe derivata ha solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe di base.

  3. Gli attributi personalizzati non fanno parte del sistema di tipi comune.

Se l'oggetto corrente rappresenta un tipo generico costruito, questo metodo restituisce con Type i parametri di tipo EventInfo sostituiti dagli argomenti di tipo appropriati.

Se l'oggetto corrente rappresenta un parametro di tipo nella definizione di un tipo o di un metodo generico, questo metodo cerca gli Type eventi del vincolo di classe.

Vedi anche

Si applica a