Бөлісу құралы:


Type.GetEvent Метод

Определение

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

Перегрузки

GetEvent(String, BindingFlags)

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

GetEvent(String)

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

GetEvent(String, BindingFlags)

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

public:
 abstract System::Reflection::EventInfo ^ GetEvent(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.EventInfo? GetEvent (string name, System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.EventInfo GetEvent (string name, System.Reflection.BindingFlags bindingAttr);
abstract member GetEvent : string * System.Reflection.BindingFlags -> System.Reflection.EventInfo
Public MustOverride Function GetEvent (name As String, bindingAttr As BindingFlags) As EventInfo

Параметры

name
String

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

bindingAttr
BindingFlags

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

-или- Default для возврата null.

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

EventInfo

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

Реализации

Исключения

name имеет значение null.

Примеры

В следующем примере кода метод используется GetEvent(String, BindingFlags) для поиска открытого или не открытого события с именем "Click", которое не является static ( Shared в Visual Basic).

#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Windows::Forms;

int main()
{
   try
   {
      // Creates a bitmask based on BindingFlags.
      BindingFlags myBindingFlags = static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public | BindingFlags::NonPublic);
      Type^ myTypeBindingFlags = System::Windows::Forms::Button::typeid;
      EventInfo^ myEventBindingFlags = myTypeBindingFlags->GetEvent( "Click", myBindingFlags );
      if ( myEventBindingFlags != nullptr )
      {
         Console::WriteLine( "Looking for the Click event in the Button class with the specified BindingFlags." );
         Console::WriteLine( myEventBindingFlags );
      }
      else
            Console::WriteLine( "The Click event is not available with the Button class." );
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The following exception was raised : {0}", e->Message );
   }
}
using System;
using System.Reflection;
using System.Security;

class MyEventExample
{
    public static void Main()
    {
        try
        {

            // Creates a bitmask based on BindingFlags.
            BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
            Type myTypeBindingFlags = typeof(System.Windows.Forms.Button);
            EventInfo myEventBindingFlags = myTypeBindingFlags.GetEvent("Click", myBindingFlags);
            if(myEventBindingFlags != null)
            {
                Console.WriteLine("Looking for the Click event in the Button class with the specified BindingFlags.");
                Console.WriteLine(myEventBindingFlags.ToString());
            }
            else
            {
                Console.WriteLine("The Click event is not available with the Button class.");
            }
        }
        catch(SecurityException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("The following exception was raised : {0}",e.Message);
        }
    }
}
Imports System.Reflection
Imports System.Security

' Compile this sample using the following command line:
' vbc type_getevent.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class MyEventExample
    Public Shared Sub Main()
        Try
            ' Creates a bitmask comprising  BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public _
                                                 Or BindingFlags.NonPublic
            Dim myTypeBindingFlags As Type = GetType(System.Windows.Forms.Button)
            Dim myEventBindingFlags As EventInfo = myTypeBindingFlags.GetEvent("Click", myBindingFlags)
            If myEventBindingFlags IsNot Nothing Then
                Console.WriteLine("Looking for the Click event in the Button class with the specified BindingFlags.")
                Console.WriteLine(myEventBindingFlags.ToString())
            Else
                Console.WriteLine("The Click event is not available with the Button class.")
            End If
        Catch e As SecurityException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As Exception
            Console.WriteLine("The following exception was raised : {0}", e.Message)
        End Try
    End Sub
End Class

Комментарии

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

  • Необходимо указать или, BindingFlags.Instance BindingFlags.Static чтобы получить возвращаемое значение.

  • Укажите BindingFlags.Public , чтобы включить в поиск открытые события.

  • Укажите, BindingFlags.NonPublic чтобы включить в Поиск события, не являющиеся общими (т. е. частные, внутренние и защищенные события).

  • Укажите, BindingFlags.FlattenHierarchy следует public ли включать и protected статические элементы вверх по иерархии; private статические члены в наследуемых классах не включаются.

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

  • BindingFlags.IgnoreCase значение, чтобы игнорировать регистр name .

  • BindingFlags.DeclaredOnly для поиска только событий, объявленных в Type , а не событий, которые были просто унаследованы.

Дополнительные сведения см. в разделе System.Reflection.BindingFlags.

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

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

Если Current Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.

См. также раздел

Применяется к

GetEvent(String)

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

public:
 System::Reflection::EventInfo ^ GetEvent(System::String ^ name);
public:
 virtual System::Reflection::EventInfo ^ GetEvent(System::String ^ name);
public System.Reflection.EventInfo? GetEvent (string name);
public System.Reflection.EventInfo GetEvent (string name);
member this.GetEvent : string -> System.Reflection.EventInfo
abstract member GetEvent : string -> System.Reflection.EventInfo
override this.GetEvent : string -> System.Reflection.EventInfo
Public Function GetEvent (name As String) As EventInfo

Параметры

name
String

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

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

EventInfo

Объект, представляющий указанное открытое событие, которое объявлено или унаследовано в текущем объекте Type, если такое событие найдено; в противном случае — null.

Реализации

Исключения

name имеет значение null.

Примеры

В следующем примере создается EventInfo объект и возвращается событие для класса Button для указанного события.

#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;
      EventInfo^ myEvent = myType->GetEvent( "Click" );
      if ( myEvent != nullptr )
      {
         Console::WriteLine( "Looking for the Click event in the Button class." );
         Console::WriteLine( myEvent );
      }
      else
            Console::WriteLine( "The Click event is not available in the Button class." );
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The following exception was raised : {0}", e->Message );
   }
}
using System;
using System.Reflection;
using System.Security;

class MyEventExample
{
    public static void Main()
    {
        try
        {

            Type myType = typeof(System.Windows.Forms.Button);
            EventInfo myEvent = myType.GetEvent("Click");
            if(myEvent != null)
            {
                Console.WriteLine("Looking for the Click event in the Button class.");
                Console.WriteLine(myEvent.ToString());
            }
            else
            {
                Console.WriteLine("The Click event is not available in the Button class.");
            }
        }
        catch(SecurityException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("The following exception was raised : {0}",e.Message);
        }
    }
}
Imports System.Reflection
Imports System.Security

' Compile this sample using the following command line:
' vbc type_getevent.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class MyEventExample
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(System.Windows.Forms.Button)
            Dim myEvent As EventInfo = myType.GetEvent("Click")
            If Not (myEvent Is Nothing) Then
                Console.WriteLine(ControlChars.Cr + "Looking for the Click event in the Button class.")
                Console.WriteLine(ControlChars.Cr + myEvent.ToString())
            Else
                Console.WriteLine("The Click event is not available with the Button class.")
            End If
        Catch e As SecurityException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As Exception
            Console.WriteLine("The following exception was raised : {0}", e.Message)
        End Try
    End Sub
End Class

Комментарии

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

nameПри поиске учитывается регистр. Поиск включает открытые статические и открытые события экземпляра.

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

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

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

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

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

Если Current Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.

См. также раздел

Применяется к