Type.GetEvents Метод
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает события, которые объявлены или унаследованы текущим объектом Type.
GetEvents() |
Возвращает все открытые события, которые объявлены или унаследованы текущим объектом Type. |
GetEvents(BindingFlags) |
При переопределении в производном классе ищет события, которые объявлены или унаследованы текущим объектом Type, используя указанные ограничения привязки. |
- Исходный код:
- 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 объект представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.
См. также раздел
Применяется к
.NET 10 и другие версии
Продукт | Версии |
---|---|
.NET | Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10 |
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 2.0, 2.1 |
- Исходный код:
- 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 объект представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.
См. также раздел
Применяется к
.NET 10 и другие версии
Продукт | Версии |
---|---|
.NET | Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10 |
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 2.0, 2.1 |
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: