EventInfo クラス
イベントの属性を取得し、イベントのメタデータにアクセスできるようにします。
この型のすべてのメンバの一覧については、EventInfo メンバ を参照してください。
System.Object
System.Reflection.MemberInfo
System.Reflection.EventInfo
<ClassInterface(ClassInterfaceType.AutoDual)>
MustInherit Public Class EventInfo Inherits MemberInfo
[C#]
[ClassInterface(ClassInterfaceType.AutoDual)]
public abstract class EventInfo : MemberInfo
[C++]
[ClassInterface(ClassInterfaceType::AutoDual)]
public __gc __abstract class EventInfo : public MemberInfo
[JScript]
public
ClassInterface(ClassInterfaceType.AutoDual)
abstract class EventInfo extends MemberInfo
スレッドセーフ
この型は、マルチスレッド操作においてタイプ セーフです。
解説
イベントはデリゲートを通じて使用されます。イベント リスナは、イベント ソースによってイベントが発生したときに必ず呼び出されるイベント ハンドラ デリゲートをインスタンス化します。イベント ソースに接続するために、イベント リスナはこのデリゲートをイベント ソースの呼び出しリストに追加します。イベントが発生すると、イベント ハンドラ デリゲートの invoke メソッドが呼び出されます。マルチキャスト イベントの通知とシングルキャスト イベントの通知の両方がサポートされています。Add メソッドと Remove メソッドは、イベントに関連付けられているイベント ハンドラ デリゲート クラスと同様、メタデータでマークする必要があります。
デリゲートは、オブジェクト指向の関数ポインタです。C または C++ では、関数ポインタはメソッドへの参照です。C または C++ の関数ポインタとは異なり、デリゲートは、メソッドへの参照、メソッドをサポートするオブジェクトへの参照という 2 つの参照を保持します。デリゲートは、メソッドを宣言または継承するクラス型がわからなくても、メソッドを呼び出すことができます。デリゲートに必要な情報は、メソッドの戻り値の型とパラメータ リストだけです。
このイベント モデルは、シングルキャスト デリゲートでもマルチキャスト デリゲートでも同じように機能します。デリゲートの invoke メソッドが呼び出された場合、メソッドの呼び出し対象となるオブジェクトは 1 つだけです。マルチキャスト修飾子をデリゲート宣言に適用すると、そのデリゲートの invoke メソッドが呼び出されたときに複数のメソッドを呼び出せるようになります。
GetCustomAttributes の inherit パラメータが true のときに、 EventInfo の ICustomAttributeProvider.GetCustomAttributes を呼び出すと、型階層が検索されません。カスタム属性を継承するには、 System.Attribute を使用します。
継承時の注意: EventInfo から継承する場合、 GetAddMethod 、 GetRemoveMethod 、 GetRaiseMethod の各メンバをオーバーライドする必要があります。
使用例
Imports System
Imports System.Reflection
Imports System.Security
Imports Microsoft.VisualBasic
' 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 Not (myEventBindingFlags Is 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 'Main
End Class 'MyEventExample
[C#]
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);
}
}
}
[C++]
#using <mscorlib.dll>
#using <System.dll>
#using <System.Windows.Forms.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 = __typeof(System::Windows::Forms::Button);
EventInfo* myEventBindingFlags = myTypeBindingFlags->GetEvent(S"Click", myBindingFlags);
if (myEventBindingFlags != 0) {
Console::WriteLine(S"Looking for the Click event in the Button class with the specified BindingFlags.");
Console::WriteLine(myEventBindingFlags);
} else
Console::WriteLine(S"The Click event is not available with the Button class.");
} catch (SecurityException* e) {
Console::WriteLine(S"An exception occurred.");
Console::WriteLine(S"Message : {0}", e->Message);
} catch (ArgumentNullException* e) {
Console::WriteLine(S"An exception occurred.");
Console::WriteLine(S"Message : {0}", e->Message);
} catch (Exception* e) {
Console::WriteLine(S"The following exception was raised : {0}", e->Message);
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Reflection
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
アセンブリ: Mscorlib (Mscorlib.dll 内)