Type.GetMethods メソッド

定義

現在の Type のメソッドを取得します。

オーバーロード

GetMethods(BindingFlags)

派生クラス内でオーバーライドされた場合、指定したバインディング制約を使用して、現在の Type に対して定義されているメソッドを検索します。

GetMethods()

現在の Type のすべてのパブリック メソッドを返します。

GetMethods(BindingFlags)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

派生クラス内でオーバーライドされた場合、指定したバインディング制約を使用して、現在の Type に対して定義されているメソッドを検索します。

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

パラメーター

bindingAttr
BindingFlags

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

または

空の配列を返す場合は Default

戻り値

現在の Type に対して定義されているメソッドのうち、指定したバインディング制約に一致するすべてのメソッドを表す MethodInfo オブジェクトの配列。

または

現在の Type に対してメソッドが定義されていないか、または定義されているメソッドの中にバインディング制約に一致するものが存在しない場合は、MethodInfo 型の空の配列。

実装

次の例では、2 つのパブリック メソッドと 1 つの保護されたメソッドを持つクラスを作成し、 に対応するオブジェクトをMyTypeClass作成Typeし、すべてのパブリック メソッドと非パブリック メソッドを取得し、その名前を表示します。

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

// Create a class having two public methods and one protected method.
public ref class MyTypeClass
{
public:
   void MyMethods(){}

   int MyMethods1()
   {
      return 3;
   }


protected:
   String^ MyMethods2()
   {
      return "hello";
   }
};

void DisplayMethodInfo( array<MethodInfo^>^myArrayMethodInfo )
{
   // Display information for all methods.
   for ( int i = 0; i < myArrayMethodInfo->Length; i++ )
   {
      MethodInfo^ myMethodInfo = dynamic_cast<MethodInfo^>(myArrayMethodInfo[ i ]);
      Console::WriteLine( "\nThe name of the method is {0}.", myMethodInfo->Name );
   }
}

int main()
{
   Type^ myType = MyTypeClass::typeid;
   
   // Get the public methods.
   array<MethodInfo^>^myArrayMethodInfo = myType->GetMethods( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance | BindingFlags::DeclaredOnly) );
   Console::WriteLine( "\nThe number of public methods is {0}->", myArrayMethodInfo->Length );
   
   // Display all the methods.
   DisplayMethodInfo( myArrayMethodInfo );
   
   // Get the nonpublic methods.
   array<MethodInfo^>^myArrayMethodInfo1 = myType->GetMethods( static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::DeclaredOnly) );
   Console::WriteLine( "\nThe number of protected methods is {0}->", myArrayMethodInfo1->Length );
   
   // Display information for all methods.
   DisplayMethodInfo( myArrayMethodInfo1 );
}
using System;
using System.Reflection;
using System.Reflection.Emit;

// Create a class having two public methods and one protected method.
public class MyTypeClass
{
    public void MyMethods()
    {
    }
    public int MyMethods1()
    {
        return 3;
    }
    protected String MyMethods2()
    {
        return "hello";
    }
}
public class TypeMain
{
    public static void Main()
    {
        Type myType =(typeof(MyTypeClass));
        // Get the public methods.
        MethodInfo[] myArrayMethodInfo = myType.GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.DeclaredOnly);
        Console.WriteLine("\nThe number of public methods is {0}.", myArrayMethodInfo.Length);
        // Display all the methods.
        DisplayMethodInfo(myArrayMethodInfo);
        // Get the nonpublic methods.
        MethodInfo[] myArrayMethodInfo1 = myType.GetMethods(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.DeclaredOnly);
        Console.WriteLine("\nThe number of protected methods is {0}.", myArrayMethodInfo1.Length);
        // Display information for all methods.
        DisplayMethodInfo(myArrayMethodInfo1);		
    }
    public static void DisplayMethodInfo(MethodInfo[] myArrayMethodInfo)
    {
        // Display information for all methods.
        for(int i=0;i<myArrayMethodInfo.Length;i++)
        {
            MethodInfo myMethodInfo = (MethodInfo)myArrayMethodInfo[i];
            Console.WriteLine("\nThe name of the method is {0}.", myMethodInfo.Name);
        }
    }
}

Imports System.Reflection
Imports System.Reflection.Emit

' Create a class having two public methods and one protected method.
Public Class MyTypeClass
    Public Sub MyMethods()
    End Sub
    Public Function MyMethods1() As Integer
        Return 3
    End Function 'MyMethods1
    Protected Function MyMethods2() As [String]
        Return "hello"
    End Function 'MyMethods2
End Class
Public Class TypeMain
    Public Shared Sub Main()

        Dim myType As Type = GetType(MyTypeClass)
        ' Get the public methods.
        Dim myArrayMethodInfo As MethodInfo() = myType.GetMethods((BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.DeclaredOnly))
        Console.WriteLine((ControlChars.Cr + "The number of public methods is " & myArrayMethodInfo.Length.ToString() & "."))
        ' Display all the public methods.
        DisplayMethodInfo(myArrayMethodInfo)
        ' Get the nonpublic methods.
        Dim myArrayMethodInfo1 As MethodInfo() = myType.GetMethods((BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.DeclaredOnly))
        Console.WriteLine((ControlChars.Cr + "The number of protected methods is " & myArrayMethodInfo1.Length.ToString() & "."))
        ' Display all the nonpublic methods.
        DisplayMethodInfo(myArrayMethodInfo1)
    End Sub

    Public Shared Sub DisplayMethodInfo(ByVal myArrayMethodInfo() As MethodInfo)
        ' Display information for all methods.
        Dim i As Integer
        For i = 0 To myArrayMethodInfo.Length - 1
            Dim myMethodInfo As MethodInfo = CType(myArrayMethodInfo(i), MethodInfo)
            Console.WriteLine((ControlChars.Cr + "The name of the method is " & myMethodInfo.Name & "."))
        Next i
    End Sub
End Class

注釈

オーバーロードがGetMethods(BindingFlags)メソッド情報を正常に取得するには、引数に bindingAttr と の少なくとも 1 つとBindingFlags.InstanceBindingFlags.Static、 と BindingFlags.Publicの少なくとも 1 つをBindingFlags.NonPublic含める必要があります。

BindingFlags のフィルター フラグを使用して、検索に含めるメソッドを定義できます。

  • インスタンス メソッドを含めるには、 を指定 BindingFlags.Instance します。

  • 静的メソッドを含めるには、 を指定 BindingFlags.Static します。

  • 検索にパブリック メソッドを含めるには、 を指定 BindingFlags.Public します。

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

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

  • MethodInfoの配列を返すには、単独で を指定BindingFlags.Defaultします。

検索のしくみを変更するには、次 BindingFlags の修飾子フラグを使用できます。

  • BindingFlags.DeclaredOnly で宣言されている Typeメソッドのみを検索する場合は 。単に継承されたメソッドは検索されません。

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

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

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

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

こちらもご覧ください

適用対象

GetMethods()

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

現在の Type のすべてのパブリック メソッドを返します。

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

戻り値

現在の MethodInfo に対して定義されているすべてのパブリック メソッドを表す Type オブジェクトの配列。

または

現在の MethodInfo に対してパブリック メソッドが定義されていない場合は、Type 型の空の配列。

実装

注釈

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

コンストラクターは、この呼び出しによって返されるメソッドの配列には含まれません。 を個別に呼び出 GetConstructors() して、コンストラクター メソッドを取得します。

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

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

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

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

注意

コンストラクターとメソッドを参照するときにパラメーターを省略することはできません。 パラメーターは、 を呼び出すときにのみ省略できます。

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

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

こちらもご覧ください

適用対象