Прочитать на английском

Поделиться через


Type.GetEvents Метод

Определение

Получает события, которые объявлены или унаследованы текущим объектом Type.

Перегрузки

GetEvents()

Возвращает все открытые события, которые объявлены или унаследованы текущим объектом Type.

GetEvents(BindingFlags)

При переопределении в производном классе ищет события, которые объявлены или унаследованы текущим объектом Type, используя указанные ограничения привязки.

GetEvents()

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

Возвращает все открытые события, которые объявлены или унаследованы текущим объектом Type.

C#
public virtual System.Reflection.EventInfo[] GetEvents();

Возвращаемое значение

Массив объектов EventInfo, представляющий все открытые события, которые объявлены или унаследованы текущим объектом Type.

-или-

Пустой массив типа EventInfo, если в текущем объекте Type нет открытых событий.

Реализации

Примеры

В следующем примере показано получение массива EventInfo объектов , получение всех событий для Button класса и отображение имен событий. Чтобы скомпилировать пример Visual Basic, используйте следующую командную строку:

vbc type_getevents1.vb /r:System.Windows.Forms.dll /r:System.dll

C#
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);
        }
    }
}

Комментарии

Событие считается открытым для отражения, если у него есть хотя бы один метод или метод доступа, который является открытым. В противном случае событие считается частным, и для его получения необходимо использовать BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (в Visual Basic объединить значения с помощью ).Or

В .NET 6 и более ранних версиях GetEvents метод не возвращает события в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка, в котором возвращаются события, так как этот порядок отличается. Однако, начиная с .NET 7, порядок является детерминированным на основе порядка метаданных в сборке.

Этот метод может быть переопределен производным классом.

В следующей таблице показано, какие элементы базового класса возвращаются методами Get при отражении типа.

Тип члена Статические Нестатическое
Конструктор Нет Нет
Поле Нет Да. Поле всегда является скрытием по имени и сигнатуре.
Событие Неприменимо Общее правило системы типов заключается в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
Метод Нет Да. Метод (как виртуальный, так и не виртуальный) может быть скрытием по имени или скрытием по имени и подписи.
Вложенный тип Нет Нет
Свойство. Неприменимо Общее правило системы типов заключается в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
  1. Функция скрытия по имени и подписи учитывает все части сигнатуры, включая настраиваемые модификаторы, типы возвращаемых значений, типы параметров, sentinels и соглашения о неуправляемых вызовах. Это двоичное сравнение.

  2. Для отражения свойства и события представляют собой скрытие по имени и подписи. Если у вас есть свойство с методом доступа get и set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.

  3. Настраиваемые атрибуты не являются частью системы общих типов.

Если текущий 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

GetEvents(BindingFlags)

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

При переопределении в производном классе ищет события, которые объявлены или унаследованы текущим объектом Type, используя указанные ограничения привязки.

C#
public abstract System.Reflection.EventInfo[] GetEvents(System.Reflection.BindingFlags bindingAttr);

Параметры

bindingAttr
BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.

-или-

Default для возврата пустого массива.

Возвращаемое значение

Массив объектов EventInfo, представляющий все события, которые объявлены или унаследованы данным объектом Type и удовлетворяют указанным ограничениям привязки.

-или-

Пустой массив типа EventInfo, если у текущего типа Type нет событий или ни одно событие не удовлетворяет ограничениям привязки.

Реализации

Примеры

В следующем примере получается массив EventInfo объектов, соответствующих указанным флагам привязки, возвращается все события для Button класса и отображаются имена событий. Чтобы скомпилировать пример Visual Basic, используйте следующую командную строку:

vbc type_getevents2.vb /r:System.Windows.Forms.dll /r:System.dll

C#
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);
        }
    }
}

Комментарии

В .NET 6 и более ранних версиях GetEvents метод не возвращает события в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка, в котором возвращаются события, так как этот порядок отличается. Однако, начиная с .NET 7, порядок является детерминированным на основе порядка метаданных в сборке.

BindingFlags Следующие флаги фильтра можно использовать для определения событий, которые следует включить в поиск:

  • Чтобы получить возврат, необходимо указать или BindingFlags.InstanceBindingFlags.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