次の方法で共有


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 メソッドが呼び出されたときに複数のメソッドを呼び出せるようになります。

GetCustomAttributesinherit パラメータが true のときに、 EventInfoICustomAttributeProvider.GetCustomAttributes を呼び出すと、型階層が検索されません。カスタム属性を継承するには、 System.Attribute を使用します。

継承時の注意: EventInfo から継承する場合、 GetAddMethodGetRemoveMethodGetRaiseMethod の各メンバをオーバーライドする必要があります。

使用例

 
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 内)

参照

EventInfo メンバ | System.Reflection 名前空間