Type.GetEvents Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает события, которые объявлены или унаследованы текущим объектом Type.
Перегрузки
GetEvents() |
Возвращает все открытые события, которые объявлены или унаследованы текущим объектом Type. |
GetEvents(BindingFlags) |
При переопределении в производном классе ищет события, которые объявлены или унаследованы текущим объектом Type, используя указанные ограничения привязки. |
GetEvents()
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Возвращает все открытые события, которые объявлены или унаследованы текущим объектом 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()
Возвращаемое значение
Массив объектов EventInfo, представляющий все открытые события, которые объявлены или унаследованы текущим объектом Type.
-или-
Пустой массив типа EventInfo, если в текущем объекте Type нет открытых событий.
Реализации
Примеры
В следующем примере показано получение массива EventInfo объектов , получение всех событий для Button
класса и отображение имен событий. Чтобы скомпилировать пример Visual Basic, используйте следующую командную строку:
vbc type_getevents1.vb /r:System.Windows.Forms.dll /r:System.dll
#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;
array<EventInfo^>^myEvents = myType->GetEvents();
Console::WriteLine( "The events on the Button class are: " );
for ( int index = 0; index < myEvents->Length; index++ )
{
Console::WriteLine( myEvents[ index ] );
}
}
catch ( SecurityException^ e )
{
Console::WriteLine( "SecurityException: {0}", e->Message );
}
catch ( ArgumentNullException^ e )
{
Console::WriteLine( "ArgumentNullException: {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception: {0}", e->Message );
}
}
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.InstanceBindingFlags.Static (в Visual Basic объединить значения с помощью ).Or
В .NET 6 и более ранних версиях GetEvents метод не возвращает события в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка, в котором возвращаются события, так как этот порядок отличается. Однако, начиная с .NET 7, порядок является детерминированным на основе порядка метаданных в сборке.
Этот метод может быть переопределен производным классом.
В следующей таблице показано, какие элементы базового класса возвращаются методами Get
при отражении типа.
Тип члена | Статические | Нестатическое |
---|---|---|
Конструктор | Нет | Нет |
Поле | Нет | Да. Поле всегда является скрытием по имени и сигнатуре. |
Событие | Неприменимо | Общее правило системы типов заключается в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Метод | Нет | Да. Метод (как виртуальный, так и не виртуальный) может быть скрытием по имени или скрытием по имени и подписи. |
Вложенный тип | Нет | Нет |
Свойство. | Неприменимо | Общее правило системы типов заключается в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Функция скрытия по имени и подписи учитывает все части сигнатуры, включая настраиваемые модификаторы, типы возвращаемых значений, типы параметров, sentinels и соглашения о неуправляемых вызовах. Это двоичное сравнение.
Для отражения свойства и события представляют собой скрытие по имени и подписи. Если у вас есть свойство с методом доступа get и set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.
Настраиваемые атрибуты не являются частью системы общих типов.
Если текущий Type тип представляет сконструированный универсальный тип, этот метод возвращает EventInfo объекты с параметрами типа, замененными соответствующими аргументами типа.
Если текущий Type объект представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.
См. также раздел
Применяется к
GetEvents(BindingFlags)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
При переопределении в производном классе ищет события, которые объявлены или унаследованы текущим объектом Type, используя указанные ограничения привязки.
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()
Параметры
- 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.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::Security;
int main()
{
try
{
// Create a bitmask based on BindingFlags.
BindingFlags myBindingFlags = static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public);
Type^ myTypeEvent = System::Windows::Forms::Button::typeid;
array<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 ] );
}
}
catch ( SecurityException^ e )
{
Console::WriteLine( "SecurityException: {0}", e->Message );
}
catch ( ArgumentNullException^ e )
{
Console::WriteLine( "ArgumentNullException: {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception: {0}", e->Message );
}
}
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.InstanceBindingFlags.Static (в Visual Basic объединить значения с помощью ).Or
Если текущий Type тип представляет сконструированный универсальный тип, этот метод возвращает EventInfo объекты с параметрами типа, замененными соответствующими аргументами типа.
Если текущий Type объект представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.