Type.GetEvents Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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. |
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.
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.
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.InstanceouBindingFlags.Staticpara obter um retorno.Especifique
BindingFlags.Publicpara incluir eventos públicos na pesquisa.Especifique
BindingFlags.NonPublicpara 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.FlattenHierarchypara incluirpubliceprotectedmembros estáticos na hierarquia;privatemembros 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.DeclaredOnlypara 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.