Type.GetEvents Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает события, объявленные или унаследованные текущим Type.
Перегрузки
| Имя | Описание |
|---|---|
| GetEvents() |
Возвращает все общедоступные события, объявленные или унаследованные текущим Type. |
| GetEvents(BindingFlags) |
При переопределении в производном классе выполняет поиск событий, объявленных или унаследованных текущим Type, с помощью указанных ограничений привязки. |
GetEvents()
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Возвращает все общедоступные события, объявленные или унаследованные текущим Type.
public:
virtual cli::array <System::Reflection::EventInfo ^> ^ GetEvents();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents)]
public virtual System.Reflection.EventInfo[] GetEvents();
public virtual System.Reflection.EventInfo[] GetEvents();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents)>]
abstract member GetEvents : unit -> System.Reflection.EventInfo[]
override this.GetEvents : unit -> System.Reflection.EventInfo[]
abstract member GetEvents : unit -> System.Reflection.EventInfo[]
override this.GetEvents : unit -> System.Reflection.EventInfo[]
Public Overridable Function GetEvents () As EventInfo()
Возвращаемое значение
Массив EventInfo объектов, представляющих все открытые события, объявленные или унаследованные текущим Type.
–или–
Пустой массив типа EventInfo, если текущий Type не имеет общедоступных событий.
Реализации
- Атрибуты
Примеры
Следующий пример получает массив EventInfo объектов, получает все события для Button класса и отображает имена событий. Чтобы скомпилировать пример Visual Basic, используйте следующую командную строку:
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
Комментарии
Событие считается общедоступным для отражения, если он имеет по крайней мере один метод или метод доступа, который является общедоступным. В противном случае событие считается частным, и необходимо использовать BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (в Visual Basic, объединить значения с помощью Or), чтобы получить его.
В .NET 6 и более ранних версиях метод GetEvents не возвращает события в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка возврата событий, так как этот порядок зависит. Однако начиная с .NET 7 порядок детерминирован на основе порядка метаданных в сборке.
Этот метод можно переопределить производным классом.
В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.
| Тип участника | Static | Нестатическое |
|---|---|---|
| Конструктор | Нет | Нет |
| Поле | Нет | Yes. Поле всегда скрывается по имени и подписи. |
| Событие | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
| Метод | Нет | Yes. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи. |
| Вложенный тип | Нет | Нет |
| Недвижимость | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.
Пользовательские атрибуты не являются частью общей системы типов.
Если текущий Type представляет созданный универсальный тип, этот метод возвращает EventInfo объекты с параметрами типа, замененными соответствующими аргументами типа.
Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.
См. также раздел
Применяется к
GetEvents(BindingFlags)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
При переопределении в производном классе выполняет поиск событий, объявленных или унаследованных текущим Type, с помощью указанных ограничений привязки.
public:
abstract cli::array <System::Reflection::EventInfo ^> ^ GetEvents(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents)]
public abstract System.Reflection.EventInfo[] GetEvents(System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.EventInfo[] GetEvents(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents)>]
abstract member GetEvents : System.Reflection.BindingFlags -> System.Reflection.EventInfo[]
abstract member GetEvents : System.Reflection.BindingFlags -> System.Reflection.EventInfo[]
Public MustOverride Function GetEvents (bindingAttr As BindingFlags) As EventInfo()
Параметры
- bindingAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающее, как выполняется поиск.
–или–
Default для возврата пустого массива.
Возвращаемое значение
Массив EventInfo объектов, представляющих все события, объявленные или унаследованные текущим Type , которые соответствуют указанным ограничениям привязки.
–или–
Пустой массив типа EventInfo, если текущий Type не имеет событий или ни один из событий не соответствует ограничениям привязки.
Реализации
- Атрибуты
Примеры
В следующем примере получается массив EventInfo объектов, соответствующих указанным флагам привязки, получает все события для Button класса и отображает имена событий. Чтобы скомпилировать пример Visual Basic, используйте следующую командную строку:
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
Комментарии
В .NET 6 и более ранних версиях метод GetEvents не возвращает события в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка возврата событий, так как этот порядок зависит. Однако начиная с .NET 7 порядок детерминирован на основе порядка метаданных в сборке.
BindingFlags Следующие флаги фильтров можно использовать для определения событий, которые необходимо включить в поиск:
Чтобы получить возврат, необходимо указать либо
BindingFlags.Instance, либоBindingFlags.Static.Укажите
BindingFlags.Public, чтобы включить общедоступные события в поиск.Укажите
BindingFlags.NonPublic, чтобы включить недоступные события (т. е. частные, внутренние и защищенные события) в поиск. Возвращаются только защищенные и внутренние события в базовых классах; частные события в базовых классах не возвращаются.Укажите
BindingFlags.FlattenHierarchy, чтобы включитьpublicиprotectedстатические элементы в иерархию;privateстатические элементы в унаследованных классах не включаются.
Для изменения работы поиска можно использовать следующие BindingFlags флаги модификатора:
-
BindingFlags.DeclaredOnlyпоиск только событий, объявленных в Typeсобытиях, а не наследуемыми.
См. System.Reflection.BindingFlags для получения дополнительной информации.
Событие считается общедоступным для отражения, если он имеет по крайней мере один метод или метод доступа, который является общедоступным. В противном случае событие считается частным, и необходимо использовать BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (в Visual Basic, объединить значения с помощью Or), чтобы получить его.
Если текущий Type представляет созданный универсальный тип, этот метод возвращает EventInfo объекты с параметрами типа, замененными соответствующими аргументами типа.
Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.