次の方法で共有


Type.GetMethod メソッド (String, BindingFlags, Binder, Type[], ParameterModifier )

指定したバインディング制約を使用して、指定したメソッドのうち、指定した引数の型および修飾子と一致するパラメータが設定されているものを検索します。

Overloads Public Overridable Function GetMethod( _
   ByVal name As String, _   ByVal bindingAttr As BindingFlags, _   ByVal binder As Binder, _   ByVal types() As Type, _   ByVal modifiers() As ParameterModifier _) As MethodInfo Implements IReflect.GetMethod
[C#]
public virtual MethodInfo GetMethod(stringname,BindingFlagsbindingAttr,Binderbinder,Type[] types,ParameterModifier[] modifiers);
[C++]
public: virtual MethodInfo* GetMethod(String* name,BindingFlagsbindingAttr,Binder* binder,Type* types[],ParameterModifiermodifiers[]);
[JScript]
public function GetMethod(
   name : String,bindingAttr : BindingFlags,binder : Binder,types : Type[],modifiers : ParameterModifier[]) : MethodInfo;

パラメータ

  • name
    取得するメソッドの名前を格納している String

  • bindingAttr
    検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。

    または

    null 参照 (Visual Basic では Nothing) を返す 0。

  • binder
    一連のプロパティを定義し、バインディングを有効にする Binder オブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバの呼び出しなどが含まれます。

    または

    DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing) 。

  • types
    取得するメソッドのパラメータの数、順序、および型を表す Type オブジェクトの配列。

    または

    パラメータをとらないメソッドを取得するための、 Type 型の空の配列 (Type[] types = new Type[0])。

  • modifiers
    types 配列内の対応する要素に関連付けられている属性を表す ParameterModifier オブジェクトの配列。既定のバインダは、このパラメータを処理しません。

戻り値

指定した要件と一致するメソッドが存在する場合は、そのメソッドを表す MethodInfo オブジェクト。それ以外の場合は null 参照 (Visual Basic では Nothing) 。

実装

IReflect.GetMethod

例外

例外の種類 条件
AmbiguousMatchException 指定した名前を持ち、指定したバインディング制約に一致するメソッドが 2 つ以上存在します。
ArgumentNullException name が null 参照 (Visual Basic では Nothing) です。

または

types が null 参照 (Nothing) です。

または

types の 1 つの要素が null 参照 (Nothing) です。

ArgumentException types が多次元です。

または

modifiers が多次元です。

または

types と modifiers の長さが異なります。

解説

既定のバインダは ParameterModifier (modifiers パラメータ) を処理しませんが、 System.Reflection.Binder 抽象クラスを使用して modifiers を処理するカスタム バインダを記述できます。 ParameterModifier は、COM 相互運用機能によって呼び出すときだけに使用され、参照渡しされるパラメータだけが処理されます。

types 配列と modifiers 配列の長さが同じです。types 配列で指定するパラメータには、 modifiers 配列で指定されている pdIn、pdOut、pdLcid、pdRetval、pdOptional、pdHasDefault の各属性を設定できます。これらの属性は、それぞれ [In]、[Out]、[lcid]、[retval]、[optional]、およびパラメータが既定値を持つかどうかを指定する値を表します。パラメータに関連付けられた属性はメタデータに格納され、相互運用性を拡張します。

次の BindingFlags フィルタ フラグは、検索対象に含めるメソッドを定義するために使用できます。

  • 戻り値を取得するには、 BindingFlags.Instance または BindingFlags.Static のいずれかを指定する必要があります。
  • 検索対象にパブリック メソッドを含めるための BindingFlags.Public を指定します。
  • 検索対象にパブリックではないメソッド (つまり、プライベート メンバやプロテクト メンバ) を含めるための BindingFlags.NonPublic を指定します。
  • 階層構造の上位にある静的メソッドを含めるための BindingFlags.FlattenHierarchy を指定します。

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

  • name の大文字と小文字の違いを無視する場合は BindingFlags.IgnoreCase
  • 単に継承されただけのメソッドではなく、 Type で宣言されたメソッドだけを検索する場合は BindingFlags.DeclaredOnly

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

要求された型がパブリックではなく、呼び出し元に現在のアセンブリ外の非パブリック オブジェクトをリフレクションするための ReflectionPermission がない場合、このメソッドは null 参照 (Visual Basic では Nothing) を返します。

メモ   コンストラクタおよびメソッドを検索する場合、パラメータは省略できません。パラメータは呼び出すときだけ省略できます。

使用例

[Visual Basic, C#, C++] メソッド情報を取得し、シグネチャと宣言型を表示する例を次に示します。

 

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class [MyClass]
    Public i As Integer = 10
    Public k As String = "My Field"
    Public Overloads Function MyMethod(ByVal i As Integer) As Integer
        Me.i = i
        Return i
    End Function 'MyMethod
    Public Overloads Function MyMethod(ByVal k As String) As String
        Me.k = k
        Return k
    End Function 'MyMethod
End Class '[MyClass]
Public Class Type_GetMethod
    Public Shared Sub Main()
        Try
            ' Get the type of MyClass.
            Dim myType As Type = GetType([MyClass])
            ' Get the attributes and metadata of MyMethod.
            Dim myMethodInfo As MethodInfo = myType.GetMethod("MyMethod", BindingFlags.Public Or BindingFlags.Instance, Nothing, New Type() {GetType(Integer)}, Nothing)
            Console.WriteLine(ControlChars.Cr + "Declaring type of the method {0} is : " + " {1}", myMethodInfo, myMethodInfo.DeclaringType.ToString())
            ' Get the attributes and metadata of MyMethod.
            Dim myMethodInfo1 As MethodInfo = myType.GetMethod("MyMethod", BindingFlags.Public Or BindingFlags.Instance, Nothing, New Type() {GetType(String)}, Nothing)
            Console.WriteLine(ControlChars.Cr + "Declaring type of the method {0} is : " + " {1}", myMethodInfo1, myMethodInfo1.DeclaringType.ToString())
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_GetMethod

[C#] 

using System;
using System.Reflection;

public class MyClass
{
    public int i = 10;
    public string k = "My Field";
    public int MyMethod(int i)
    {
        this.i = i;
        return i;
    }
    public string MyMethod(string k)
    {
        this.k = k;
        return k;
    }
}
public class Type_GetMethod
{
    public static void Main()
    {
        try
        {
            // Get the type of MyClass.
            Type myType = typeof(MyClass);
            // Get the attributes and metadata of MyMethod.
            MethodInfo myMethodInfo = myType.GetMethod("MyMethod", 
                BindingFlags.Public | BindingFlags.Instance, null, 
                new Type[] {typeof(int)}, null);
            Console.WriteLine("\n Declaring type of the method {0} is: \n {1}", myMethodInfo,
                myMethodInfo.DeclaringType);
            // Get the attributes and metadata of MyMethod.
            MethodInfo myMethodInfo1 = myType.GetMethod("MyMethod", 
                BindingFlags.Public | BindingFlags.Instance, null, 
                new Type[] {typeof(string)}, null);
            Console.WriteLine("\n Declaring type of the method {0} is: \n {1}", myMethodInfo1,
                myMethodInfo1.DeclaringType);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }
    }
}

[C++] 

#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;

public __gc class MyClass {
public:
    int  i;
    String* k ;
    int MyMethod(int i) {
        this->i = i;
        return i;
    }
    String* MyMethod(String* k) {
        this->k = k;
        return k;
    }
};

int main() {
    try {
        // Get the type of MyClass.
        Type*  myType = __typeof(MyClass);
        // Get the attributes and metadata of MyMethod.
        Type* temp0[] = {__typeof(int)};
        MethodInfo*  myMethodInfo = myType->GetMethod(S"MyMethod",
            static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance), 0,
            temp0, 0);
        Console::WriteLine(S"\n Declaring type of the method {0} is: \n {1}", myMethodInfo,
            myMethodInfo->DeclaringType);
        // Get the attributes and metadata of MyMethod.
        Type* temp1[] = {__typeof(String)};
        MethodInfo*  myMethodInfo1 = myType->GetMethod(S"MyMethod",
            static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance), 0,
            temp1, 0);
        Console::WriteLine(S"\n Declaring type of the method {0} is: \n {1}", myMethodInfo1,
            myMethodInfo1->DeclaringType);
    } catch (Exception* e) {
        Console::WriteLine(S"Exception: {0}", e->Message);
    }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: 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, Common Language Infrastructure (CLI) Standard

.NET Framework セキュリティ:

参照

Type クラス | Type メンバ | System 名前空間 | Type.GetMethod オーバーロードの一覧 | MethodInfo | String | BindingFlags | Binder | DefaultBinder | ParameterModifier | ReflectionPermission | GetMethodImpl | GetMethods