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
Параметры
- bindingAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающих способ проведения поиска.
-или-
Default для возврата null
.
Возвращаемое значение
Объект, представляющий указанное событие, которое объявлено или унаследовано текущим типом 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
Параметры
Возвращаемое значение
Объект, представляющий указанное открытое событие, которое объявлено или унаследовано в текущем объекте 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 ниже. |
При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.
Настраиваемые атрибуты не являются частью системы общих типов.
Если текущий объект Type представляет сконструированный универсальный тип, этот метод возвращает объект EventInfo с параметрами типа, замененными соответствующими аргументами типа.
Если Current Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск событий ограничения класса.