Type.GetEvents Método

Definição

Obtém os eventos que são declarados ou herdados pelo atual Type.

Sobrecargas

Nome Description
GetEvents()

Retorna todos os eventos públicos que são declarados ou herdados pelo atual Type.

GetEvents(BindingFlags)

Quando substituído em uma classe derivada, pesquisa eventos que são declarados ou herdados pelo atual Type, usando as restrições de associação especificadas.

GetEvents()

Retorna todos os eventos públicos que são declarados ou herdados pelo atual Type.

public:
 virtual cli::array <System::Reflection::EventInfo ^> ^ GetEvents();
public virtual System.Reflection.EventInfo[] GetEvents();
abstract member GetEvents : unit -> System.Reflection.EventInfo[]
override this.GetEvents : unit -> System.Reflection.EventInfo[]
Public Overridable Function GetEvents () As EventInfo()

Retornos

Uma matriz de EventInfo objetos que representa todos os eventos públicos que são declarados ou herdados pelo atual Type.

-ou-

Uma matriz vazia de tipo EventInfo, se a atual Type não tiver eventos públicos.

Implementações

Exemplos

O exemplo a seguir obtém uma matriz de EventInfo objetos, obtém todos os eventos de uma Button classe e exibe os nomes de eventos. Para compilar o exemplo de Visual Basic, use a seguinte linha de comando:

vbc type_getevents1.vb /r:System.Windows.Forms.dll /r:System.dll

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

class EventsSample
{
    public static void Main()
    {
        try
        {
            // Creates a bitmask based on BindingFlags.
            BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public;
            Type myTypeEvent = typeof(System.Windows.Forms.Button);
            EventInfo[] myEventsBindingFlags = myTypeEvent.GetEvents(myBindingFlags);
            Console.WriteLine("\nThe events on the Button class with the specified BindingFlags are : ");
            for (int index = 0; index < myEventsBindingFlags.Length; index++)
            {
                Console.WriteLine(myEventsBindingFlags[index].ToString());
            }
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException :" + e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException : " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception : " + e.Message);
        }
    }
}
open System
open System.Reflection
open System.Security

try
    // Creates a bitmask based on BindingFlags.
    let myBindingFlags = BindingFlags.Instance ||| BindingFlags.Public
    let myTypeEvent = typeof<System.Windows.Forms.Button>
    let myEventsBindingFlags = myTypeEvent.GetEvents myBindingFlags
    printfn "\nThe events on the Button class with the specified BindingFlags are : "
    for flag in myEventsBindingFlags do
        printfn $"{flag}"
with
| :? SecurityException as e ->
    printfn $"SecurityException: {e.Message}"
| :? ArgumentNullException as e ->
    printfn $"ArgumentNullException: {e.Message}"
| e ->
    printfn $"Exception : {e.Message}"
Imports System.Reflection
Imports System.Security

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

Class EventsSample

    Public Shared Sub Main()
        Try
            ' Creates a bitmask based on BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public
            Dim myTypeEvent As Type = GetType(System.Windows.Forms.Button)
            Dim myEventsBindingFlags As EventInfo() = myTypeEvent.GetEvents(myBindingFlags)
            Console.WriteLine(ControlChars.Cr + "The events on the Button class with the specified BindingFlags are : ")
            Dim index As Integer
            For index = 0 To myEventsBindingFlags.Length - 1
                Console.WriteLine(myEventsBindingFlags(index).ToString())
            Next index
        Catch e As SecurityException
            Console.WriteLine(("SecurityException :" + e.Message))
        Catch e As ArgumentNullException
            Console.WriteLine(("ArgumentNullException : " + e.Message))
        Catch e As Exception
            Console.WriteLine(("Exception : " + e.Message))
        End Try
    End Sub
End Class

Comentários

Um evento é considerado público para reflexão se ele tiver pelo menos um método ou acessador público. Caso contrário, o evento é considerado privado e você deve usar BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (em Visual Basic, combinar os valores usando Or) para obtê-lo.

Em .NET 6 e versões anteriores, o método GetEvents não retorna eventos em uma ordem específica, como ordem alfabética ou de declaração. Seu código não deve depender da ordem na qual os eventos são retornados, pois essa ordem varia. No entanto, começando com .NET 7, a ordenação é determinística com base na ordenação de metadados no assembly.

Esse método pode ser substituído por uma classe derivada.

A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get ao refletir sobre um tipo.

Tipo de Membro Estático Não estático
Construtor No No
Campo No Sim. Um campo permanece sempre oculto por nome e assinatura.
Event Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo.
Método No Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura.
Tipo aninhado No No
Property Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo.
  1. Oculto por nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, tipos de retorno, tipos de parâmetro, sentinelas e convenções de chamada não gerenciadas. Essa é uma comparação binária.

  2. Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. Se você tiver uma propriedade com um acessador get e um set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.

  3. Atributos personalizados não fazem parte do sistema de tipos comuns.

Se a corrente Type representar um tipo genérico construído, esse método retornará os EventInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.

Se a corrente Type representar um parâmetro de tipo na definição de um tipo genérico ou método genérico, esse método pesquisará os eventos da restrição de classe.

Confira também

Aplica-se a

GetEvents(BindingFlags)

Quando substituído em uma classe derivada, pesquisa eventos que são declarados ou herdados pelo atual Type, usando as restrições de associação especificadas.

public:
 abstract cli::array <System::Reflection::EventInfo ^> ^ GetEvents(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.EventInfo[] GetEvents(System.Reflection.BindingFlags bindingAttr);
abstract member GetEvents : System.Reflection.BindingFlags -> System.Reflection.EventInfo[]
Public MustOverride Function GetEvents (bindingAttr As BindingFlags) As EventInfo()

Parâmetros

bindingAttr
BindingFlags

Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é conduzida.

-ou-

Default para retornar uma matriz vazia.

Retornos

Uma matriz de EventInfo objetos que representa todos os eventos que são declarados ou herdados pela corrente Type que correspondem às restrições de associação especificadas.

-ou-

Uma matriz vazia de tipo EventInfo, se a atual Type não tiver eventos ou se nenhum dos eventos corresponder às restrições de associação.

Implementações

Exemplos

O exemplo a seguir obtém uma matriz de EventInfo objetos que correspondem aos sinalizadores de associação especificados, obtém todos os eventos de uma Button classe e exibe os nomes de eventos. Para compilar o exemplo de Visual Basic, use a seguinte linha de comando:

vbc type_getevents2.vb /r:System.Windows.Forms.dll /r:System.dll

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

class EventsSample
{
    public static void Main()
    {
        try
        {
            // Create a bitmask based on BindingFlags.
            BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public;
            Type myTypeEvent = typeof(System.Windows.Forms.Button);
            EventInfo[] myEventsBindingFlags = myTypeEvent.GetEvents(myBindingFlags);
            Console.WriteLine("\nThe events on the Button class with the specified BindingFlags are:");
            for (int index = 0; index < myEventsBindingFlags.Length; index++)
            {
                Console.WriteLine(myEventsBindingFlags[index].ToString());
            }
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException:" + e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}
open System
open System.Reflection
open System.Security

try
    // Creates a bitmask based on BindingFlags.
    let myBindingFlags = BindingFlags.Instance ||| BindingFlags.Public
    let myTypeEvent = typeof<System.Windows.Forms.Button>
    let myEventsBindingFlags = myTypeEvent.GetEvents myBindingFlags
    printfn "\nThe events on the Button class with the specified BindingFlags are : "
    for flag in myEventsBindingFlags do
        printfn $"{flag}"
with
| :? SecurityException as e ->
    printfn $"SecurityException: {e.Message}"
| :? ArgumentNullException as e ->
    printfn $"ArgumentNullException: {e.Message}"
| e ->
    printfn $"Exception : {e.Message}"
Imports System.Reflection
Imports System.Security
Imports System.Windows.Forms

Class EventsSample

    Public Shared Sub Main()
        Try
            ' Create a bitmask based on BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public
            Dim myTypeEvent As Type = GetType(System.Windows.Forms.Button)
            Dim myEventsBindingFlags As EventInfo() = myTypeEvent.GetEvents(myBindingFlags)
            Console.WriteLine(ControlChars.Cr + "The events on the Button class with the specified BindingFlags are:")
            Dim index As Integer
            For index = 0 To myEventsBindingFlags.Length - 1
                Console.WriteLine(myEventsBindingFlags(index).ToString())
            Next index
        Catch e As SecurityException
            Console.WriteLine("SecurityException:" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException: " + e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message)
        End Try
    End Sub
End Class

Comentários

Em .NET 6 e versões anteriores, o método GetEvents não retorna eventos em uma ordem específica, como ordem alfabética ou de declaração. Seu código não deve depender da ordem na qual os eventos são retornados, pois essa ordem varia. No entanto, começando com .NET 7, a ordenação é determinística com base na ordenação de metadados no assembly.

Os seguintes BindingFlags sinalizadores de filtro podem ser usados para definir quais eventos incluir na pesquisa:

  • Você deve especificar ou BindingFlags.Instance ou BindingFlags.Static para obter um retorno.

  • Especifique BindingFlags.Public para incluir eventos públicos na pesquisa.

  • Especifique BindingFlags.NonPublic para incluir eventos não públicos (ou seja, eventos privados, internos e protegidos) na pesquisa. Somente eventos protegidos e internos em classes base são retornados; eventos privados em classes base não são retornados.

  • Especifique BindingFlags.FlattenHierarchy para incluir public e protected membros estáticos na hierarquia; private membros estáticos em classes herdadas não estão incluídos.

Os seguintes sinalizadores de modificador BindingFlags podem ser usados para alterar como a pesquisa funciona:

  • BindingFlags.DeclaredOnly para pesquisar apenas os eventos declarados nos Typeeventos, não que foram simplesmente herdados.

Consulte System.Reflection.BindingFlags para obter mais informações.

Um evento é considerado público para reflexão se ele tiver pelo menos um método ou acessador público. Caso contrário, o evento é considerado privado e você deve usar BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (em Visual Basic, combinar os valores usando Or) para obtê-lo.

Se a corrente Type representar um tipo genérico construído, esse método retornará os EventInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.

Se a corrente Type representar um parâmetro de tipo na definição de um tipo genérico ou método genérico, esse método pesquisará os eventos da restrição de classe.

Confira também

Aplica-se a