Type.GetEvents Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém os eventos que são declarados ou herdados pelo atual Type.
Sobrecargas
| Name | Description |
|---|---|
| GetEvents() |
Devolve todos os eventos públicos que são declarados ou herdados pelo atual Type. |
| GetEvents(BindingFlags) |
Quando sobrescrito numa classe derivada, procura eventos que são declarados ou herdados pelo atual Type, usando as restrições de ligação especificadas. |
GetEvents()
Devolve 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()
Devoluções
Um array de EventInfo objetos que representa todos os eventos públicos que são declarados ou herdados pelo atual Type.
-ou-
Um array vazio de tipo EventInfo, se a corrente Type não tiver eventos públicos.
Implementações
Exemplos
O exemplo seguinte obtém um array de EventInfo objetos, obtém todos os eventos de uma Button classe e apresenta os nomes dos eventos. Para compilar o exemplo do Visual Basic, use a seguinte linha de comandos:
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
Observações
Um evento é considerado público para reflexão se tiver pelo menos um método ou acessório que seja público. Caso contrário, o evento é considerado privado, e deve usar BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (em Visual Basic, combinar os valores usando Or) para o obter.
Em versões .NET 6 e anteriores, o método GetEvents não devolve eventos numa ordem específica, como ordem alfabética ou de declaração. O seu código não deve depender da ordem em que os eventos são devolvidos, porque essa ordem varia. No entanto, a partir do .NET 7, a ordenação é determinística com base na ordenação dos metadados na assembleia.
Este método pode ser anulado por uma classe derivada.
A tabela a seguir mostra quais membros de uma classe base são retornados pelos Get métodos ao refletir sobre um tipo.
| Tipo de Membro | Estático | Não-estático |
|---|---|---|
| Construtor | No | No |
| Campo | No | Yes. Um campo é sempre ocultado com base no nome e assinatura. |
| Event | Não aplicável | A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo. |
| Método | No | Yes. Um método (virtual e não virtual) pode ser ocultado por nome ou ocultado por nome e assinatura. |
| Tipo aninhado | No | No |
| Property | Não aplicável | A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo. |
Ocultar por nome e assinatura considera todas as partes da assinatura, incluindo modificadores personalizados, tipos de retorno, tipos de parâmetros, sentinelas e convenções de chamada não gerenciadas. Esta é uma comparação binária.
Para reflexão, as propriedades e os eventos são ocultados 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 acessor get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.
Os atributos personalizados não fazem parte do sistema de tipo comum.
Se a corrente Type representa um tipo genérico construído, este método devolve os EventInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.
Se a corrente Type representa um parâmetro de tipo na definição de um tipo genérico ou método genérico, este método pesquisa os eventos da restrição de classe.
Ver também
Aplica-se a
GetEvents(BindingFlags)
Quando sobrescrito numa classe derivada, procura eventos que são declarados ou herdados pelo atual Type, usando as restrições de ligaçã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 especifica como a pesquisa é realizada.
-ou-
Default para devolver um array vazio.
Devoluções
Um array de EventInfo objetos que representa todos os eventos declarados ou herdados pelo atual Type que correspondem às restrições de ligação especificadas.
-ou-
Um array vazio do tipo EventInfo, se a corrente Type não tiver eventos, ou se nenhum dos eventos corresponder às restrições de ligação.
Implementações
Exemplos
O exemplo seguinte obtém um array de EventInfo objetos que correspondem aos flags de ligação especificados, obtém todos os eventos de uma Button classe e exibe os nomes dos eventos. Para compilar o exemplo do Visual Basic, use a seguinte linha de comandos:
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
Observações
Em versões .NET 6 e anteriores, o método GetEvents não devolve eventos numa ordem específica, como ordem alfabética ou de declaração. O seu código não deve depender da ordem em que os eventos são devolvidos, porque essa ordem varia. No entanto, a partir do .NET 7, a ordenação é determinística com base na ordenação dos metadados na assembleia.
Os seguintes BindingFlags flags de filtro podem ser usados para definir quais os eventos a incluir na pesquisa:
Você deve especificar ou
BindingFlags.InstanceouBindingFlags.Staticpara obter um retorno.Especifique
BindingFlags.Publicincluir eventos públicos na pesquisa.Especifique
BindingFlags.NonPublicincluir eventos não públicos (ou seja, privados, internos e protegidos) na busca. Apenas eventos protegidos e internos nas classes base são devolvidos; Eventos privados nas aulas base não são devolvidos.Especifique
BindingFlags.FlattenHierarchypara incluirpubliceprotectedmembros estáticos na hierarquia;privatemembros estáticos em classes herdadas não são incluídos.
Os seguintes BindingFlags sinalizadores modificadores podem ser usados para alterar o funcionamento da pesquisa:
-
BindingFlags.DeclaredOnlyprocurar apenas os eventos declarados no Type, não os eventos que foram simplesmente herdados.
Consulte System.Reflection.BindingFlags para obter mais informações.
Um evento é considerado público para reflexão se tiver pelo menos um método ou acessório que seja público. Caso contrário, o evento é considerado privado, e deve usar BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (em Visual Basic, combinar os valores usando Or) para o obter.
Se a corrente Type representa um tipo genérico construído, este método devolve os EventInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.
Se a corrente Type representa um parâmetro de tipo na definição de um tipo genérico ou método genérico, este método pesquisa os eventos da restrição de classe.