英語で読む

次の方法で共有


Type.GetMethods メソッド

定義

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

オーバーロード

GetMethods(BindingFlags)

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

GetMethods()

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

GetMethods(BindingFlags)

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

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

C#
public abstract System.Reflection.MethodInfo[] GetMethods(System.Reflection.BindingFlags bindingAttr);

パラメーター

bindingAttr
BindingFlags

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

または

空の配列を返す場合は Default

戻り値

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

または

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

実装

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

C#
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);
        }
    }
}

注釈

オーバーロードが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 メソッドを検索します。

こちらもご覧ください

適用対象

.NET 10 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetMethods()

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

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

C#
public System.Reflection.MethodInfo[] GetMethods();

戻り値

現在の 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 メソッドを検索します。

こちらもご覧ください

適用対象

.NET 10 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1