Type.GetEvents メソッド

定義

現在の Type で宣言または継承されているイベントを取得します。

オーバーロード

GetEvents()

現在の Type で宣言または継承されているすべてのパブリック イベントを返します。

GetEvents(BindingFlags)

派生クラスによってオーバーライドされた場合、指定したバインディング制約を使用して、現在の Type で宣言または継承されているイベントを検索します。

GetEvents()

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

現在の Type で宣言または継承されているすべてのパブリック イベントを返します。

public:
 virtual cli::array <System::Reflection::EventInfo ^> ^ GetEvents();
public virtual System.Reflection.EventInfo[] GetEvents ();
abstract member GetEvents : unit -> System.Reflection.EventInfo[]
override this.GetEvents : unit -> System.Reflection.EventInfo[]
Public Overridable Function GetEvents () As EventInfo()

戻り値

現在の EventInfo で宣言または継承されているすべてのパブリック イベントを表す Type オブジェクトの配列。

または

現在の EventInfo にパブリック イベントがない場合は、Type 型の空の配列。

実装

次の例では、オブジェクトの EventInfo 配列を取得し、クラスのすべてのイベントを Button 取得し、イベント名を表示します。 Visual Basic の例をコンパイルするには、次のコマンド ラインを使用します。

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

#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;
      array<EventInfo^>^myEvents = myType->GetEvents();
      Console::WriteLine( "The events on the Button class are: " );
      for ( int index = 0; index < myEvents->Length; index++ )
      {
         Console::WriteLine( myEvents[ index ] );

      }
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "SecurityException: {0}", e->Message );
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "ArgumentNullException: {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}
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);
        }
    }
}
open System
open System.Reflection
open System.Security

try
    // Creates a bitmask based on BindingFlags.
    let myBindingFlags = BindingFlags.Instance ||| BindingFlags.Public
    let myTypeEvent = typeof<System.Windows.Forms.Button>
    let myEventsBindingFlags = myTypeEvent.GetEvents myBindingFlags
    printfn "\nThe events on the Button class with the specified BindingFlags are : "
    for flag in myEventsBindingFlags do
        printfn $"{flag}"
with
| :? SecurityException as e ->
    printfn $"SecurityException: {e.Message}"
| :? ArgumentNullException as e ->
    printfn $"ArgumentNullException: {e.Message}"
| e ->
    printfn $"Exception : {e.Message}"
Imports System.Reflection
Imports System.Security

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

Class EventsSample

    Public Shared Sub Main()
        Try
            ' Creates a bitmask based on BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public
            Dim myTypeEvent As Type = GetType(System.Windows.Forms.Button)
            Dim myEventsBindingFlags As EventInfo() = myTypeEvent.GetEvents(myBindingFlags)
            Console.WriteLine(ControlChars.Cr + "The events on the Button class with the specified BindingFlags are : ")
            Dim index As Integer
            For index = 0 To myEventsBindingFlags.Length - 1
                Console.WriteLine(myEventsBindingFlags(index).ToString())
            Next index
        Catch e As SecurityException
            Console.WriteLine(("SecurityException :" + e.Message))
        Catch e As ArgumentNullException
            Console.WriteLine(("ArgumentNullException : " + e.Message))
        Catch e As Exception
            Console.WriteLine(("Exception : " + e.Message))
        End Try
    End Sub
End Class

注釈

イベントがパブリックであるメソッドまたはアクセサーが少なくとも 1 つある場合、イベントはリフレクションに対してパブリックと見なされます。 それ以外の場合、イベントはプライベートと見なされ、(Visual Basic では、 を使用して値を結合する) を使用BindingFlags.NonPublicOr | BindingFlags.Instance | BindingFlags.Staticしてイベントを取得する必要があります。

.NET 6 以前のバージョンでは、 GetEvents メソッドはアルファベット順や宣言順序などの特定の順序でイベントを返しません。 コードは、イベントが返される順序に依存してはなりません。これは、その順序が異なるためです。 ただし、.NET 7 以降では、順序付けはアセンブリ内のメタデータの順序に基づいて決定論的です。

このメソッドは、派生クラスによってオーバーライドできます。

次の表は、型に反映するときに、 メソッドによって Get 返される基底クラスのメンバーを示しています。

メンバーの型 静的 非静的
コンストラクター いいえ いいえ
フィールド いいえ はい。 フィールドは常に名前と署名で非表示になります。
Event 適用なし 一般的な型システムルールは、継承が プロパティを実装するメソッドと同じであるということです。 リフレクションでは、プロパティが名前と署名による非表示として扱われます。 以下の注 2 を参照してください。
メソッド いいえ はい。 メソッド (仮想と非仮想の両方) には、名前による非表示または名前と署名による非表示を指定できます。
入れ子になった型 いいえ いいえ
プロパティ 適用なし 一般的な型システムルールは、継承が プロパティを実装するメソッドと同じであるということです。 リフレクションでは、プロパティが名前と署名による非表示として扱われます。 以下の注 2 を参照してください。
  1. 名前と署名による非表示では、カスタム修飾子、戻り値の型、パラメーターの型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分が考慮されます。 これはバイナリ比較です。

  2. リフレクションの場合、プロパティとイベントは名前と署名による非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーのみが含まれている場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。

  3. カスタム属性は、共通型システムの一部ではありません。

現在 Type の が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 EventInfo します。

現在 Type の がジェネリック型またはジェネリック メソッドの定義で型パラメーターを表している場合、このメソッドはクラス制約のイベントを検索します。

こちらもご覧ください

適用対象

GetEvents(BindingFlags)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

派生クラスによってオーバーライドされた場合、指定したバインディング制約を使用して、現在の Type で宣言または継承されているイベントを検索します。

public:
 abstract cli::array <System::Reflection::EventInfo ^> ^ GetEvents(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.EventInfo[] GetEvents (System.Reflection.BindingFlags bindingAttr);
abstract member GetEvents : System.Reflection.BindingFlags -> System.Reflection.EventInfo[]
Public MustOverride Function GetEvents (bindingAttr As BindingFlags) As EventInfo()

パラメーター

bindingAttr
BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。

または

空の配列を返す場合は Default

戻り値

現在の EventInfo で宣言または継承されているイベントのうち、指定したバインディング制約に一致するすべてのイベントを表す Type オブジェクトの配列。

または

現在の EventInfo にイベントが存在しないか、またはイベントの中にバインディング制約に一致するものがない場合は、Type 型の空の配列。

実装

次の例では、指定したバインド フラグに一致するオブジェクトの EventInfo 配列を取得し、クラスのすべてのイベントを Button 取得し、イベント名を表示します。 Visual Basic の例をコンパイルするには、次のコマンド ラインを使用します。

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

#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
   {
      
      // Create a bitmask based on BindingFlags.
      BindingFlags myBindingFlags = static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public);
      Type^ myTypeEvent = System::Windows::Forms::Button::typeid;
      array<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 ] );

      }
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "SecurityException: {0}", e->Message );
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "ArgumentNullException: {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}
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);
        }
    }
}
open System
open System.Reflection
open System.Security

try
    // Creates a bitmask based on BindingFlags.
    let myBindingFlags = BindingFlags.Instance ||| BindingFlags.Public
    let myTypeEvent = typeof<System.Windows.Forms.Button>
    let myEventsBindingFlags = myTypeEvent.GetEvents myBindingFlags
    printfn "\nThe events on the Button class with the specified BindingFlags are : "
    for flag in myEventsBindingFlags do
        printfn $"{flag}"
with
| :? SecurityException as e ->
    printfn $"SecurityException: {e.Message}"
| :? ArgumentNullException as e ->
    printfn $"ArgumentNullException: {e.Message}"
| e ->
    printfn $"Exception : {e.Message}"
Imports System.Reflection
Imports System.Security
Imports System.Windows.Forms

Class EventsSample

    Public Shared Sub Main()
        Try
            ' Create a bitmask based on BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public
            Dim myTypeEvent As Type = GetType(System.Windows.Forms.Button)
            Dim myEventsBindingFlags As EventInfo() = myTypeEvent.GetEvents(myBindingFlags)
            Console.WriteLine(ControlChars.Cr + "The events on the Button class with the specified BindingFlags are:")
            Dim index As Integer
            For index = 0 To myEventsBindingFlags.Length - 1
                Console.WriteLine(myEventsBindingFlags(index).ToString())
            Next index
        Catch e As SecurityException
            Console.WriteLine("SecurityException:" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException: " + e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message)
        End Try
    End Sub
End Class

注釈

.NET 6 以前のバージョンでは、 GetEvents メソッドはアルファベット順や宣言順序などの特定の順序でイベントを返しません。 コードは、イベントが返される順序に依存してはなりません。これは、その順序が異なるためです。 ただし、.NET 7 以降では、順序付けはアセンブリ内のメタデータの順序に基づいて決定論的です。

BindingFlags のフィルター フラグを使用して、検索に含めるイベントを定義できます。

  • 戻り値を取得するには、 または BindingFlags.StaticBindingFlags.Instance指定する必要があります。

  • 検索にパブリック イベントを含めるには、 を指定 BindingFlags.Public します。

  • 非パブリック イベント (つまり、プライベート、内部、保護されたイベント) を検索に含める場合に指定 BindingFlags.NonPublic します。 基底クラスの保護されたイベントと内部イベントのみが返されます。基底クラスのプライベート イベントは返されません。

  • 階層に含める静的メンバーとprotected静的メンバーを指定BindingFlags.FlattenHierarchypublicしますprivate。継承されたクラスの静的メンバーは含まれません。

検索の動作方法を変更するには、次 BindingFlags の修飾子フラグを使用できます。

  • BindingFlags.DeclaredOnly で宣言された Typeイベントのみを検索する場合は 。単に継承されたイベントは検索されません。

詳細については、「System.Reflection.BindingFlags」を参照してください。

イベントがパブリックであるメソッドまたはアクセサーが少なくとも 1 つある場合、イベントはリフレクションに対してパブリックと見なされます。 それ以外の場合、イベントはプライベートと見なされ、(Visual Basic では、 を使用して値を結合する) を使用BindingFlags.NonPublicOr | BindingFlags.Instance | BindingFlags.Staticしてイベントを取得する必要があります。

現在 Type の が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 EventInfo します。

現在 Type の がジェネリック型またはジェネリック メソッドの定義で型パラメーターを表している場合、このメソッドはクラス制約のイベントを検索します。

こちらもご覧ください

適用対象