Type.GetMethod メソッド (String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier )
指定したバインディング制約および指定した呼び出し規約を使用して、指定したメソッドのうち、指定した引数の型および修飾子と一致するパラメータが設定されているものを検索します。
Overloads Public Function GetMethod( _
ByVal name As String, _ ByVal bindingAttr As BindingFlags, _ ByVal binder As Binder, _ ByVal callConvention As CallingConventions, _ ByVal types() As Type, _ ByVal modifiers() As ParameterModifier _) As MethodInfo
[C#]
public MethodInfo GetMethod(stringname,BindingFlagsbindingAttr,Binderbinder,CallingConventionscallConvention,Type[] types,ParameterModifier[] modifiers);
[C++]
public: MethodInfo* GetMethod(String* name,BindingFlagsbindingAttr,Binder* binder,CallingConventionscallConvention,Type* types[],ParameterModifiermodifiers[]);
[JScript]
public function GetMethod(
name : String,bindingAttr : BindingFlags,binder : Binder,callConvention : CallingConventions,types : Type[],modifiers : ParameterModifier[]) : MethodInfo;
パラメータ
name
取得するメソッドの名前を格納している String 。bindingAttr
検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。または
null 参照 (Visual Basic では Nothing) を返す 0。
binder
一連のプロパティを定義し、バインディングを有効にする Binder オブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバの呼び出しなどが含まれます。または
DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing) 。
callConvention
引数の順序とレイアウト、戻り値を渡す方法、引数を格納するレジスタ、スタックのクリーンアップの方法に関する一連の規則を指定する CallingConventions オブジェクト。types
取得するメソッドのパラメータの数、順序、および型を表す Type オブジェクトの配列。または
パラメータをとらないメソッドを取得するための、 Type 型の空の配列 (Type[] types = new Type[0])。
modifiers
types 配列内の対応する要素に関連付けられている属性を表す ParameterModifier オブジェクトの配列。既定のバインダは、このパラメータを処理しません。
戻り値
指定した要件と一致するメソッドが存在する場合は、そのメソッドを表す MethodInfo オブジェクト。それ以外の場合は null 参照 (Visual Basic では Nothing) 。
例外
例外の種類 | 条件 |
---|---|
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 相互運用機能によって呼び出すときだけに使用され、参照渡しされるパラメータだけが処理されます。
型に対するリフレクション時に GetXXX メソッドによって返される基本クラスのメンバを次の表に示します。
メンバ型 | 静的 | 非静的 |
---|---|---|
コンストラクタ | いいえ | いいえ |
フィールド | いいえ | はい。フィールドは常に名前と署名によって隠ぺいされます。 |
イベント | 適用なし | 共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。 |
メソッド | いいえ | はい。メソッド (仮想メソッドと非仮想メソッドの両方) は、名前によって隠蔽することもできますし、名前と署名によって隠蔽することもできます。 |
入れ子になった型 | いいえ | いいえ |
プロパティ | 適用なし | 共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。 |
- 名前と署名による隠ぺいでは、カスタム修飾子、戻り値の型、パラメータの型、sentinel、およびアンマネージ呼び出し規約を含めて、署名のすべての部分が判断の対象となります。これはバイナリ比較です。
- リフレクションの場合、プロパティおよびイベントは名前と署名によって隠ぺいされています。基本クラスに get アクセサと set アクセサの両方を持つプロパティがあり、派生クラスには get アクセサしかない場合、派生クラスのプロパティにより基本クラスのプロパティが隠ぺいされ、基本クラスの set アクセサにはアクセスできません。
- カスタム属性は、共通の型システムの一部ではありません。
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++] クラス MyClass の MyFunc という名前のメソッドに関する情報を表示する例を次に示します。
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class [MyClass]
Public i As Integer = 10
Public j As Integer = 2
Public Function MyFunc(ByVal i As Integer, ByVal j As Integer) As Integer
Dim k As Integer
k = i * 10 - j
Return k
End Function 'MyFunc
End Class '[MyClass]
Public Class Type_GetMethod
Public Shared Sub Main()
Try
' Get the type of MyClass.
Dim myType As Type = GetType([MyClass])
' Get information for MyFunc(int, int).
Dim myMemberInfo As MemberInfo = myType.GetMethod("MyFunc", BindingFlags.Public Or BindingFlags.Instance, Nothing, CallingConventions.Any, New Type() {GetType(Integer), GetType(Integer)}, Nothing)
Console.WriteLine(ControlChars.NewLine + "Displaying method MyFunc: " + ControlChars.NewLine)
' Display the method information.
Console.WriteLine("{0}", myMemberInfo)
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 int j = 2;
public int MyFunc(int i , int j)
{
int k;
k = i * 10 - j;
return k;
}
}
public class Type_GetMethod
{
public static void Main()
{
try
{
// Get the type of MyClass.
Type myType = typeof(MyClass);
// Get the method information for MyFunc(int, int).
MemberInfo myMemberInfo = myType.GetMethod("MyFunc", BindingFlags.Public |
BindingFlags.Instance,
null,
CallingConventions.Any,
new Type[] {typeof(int),typeof(int)},
null);
Console.WriteLine("\nDisplaying information for MyFunc: \n");
// Display the method information.
Console.WriteLine("{0}", myMemberInfo);
}
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;
int j;
int MyFunc(int i , int j) {
int k;
k = i * 10 - j;
return k;
}
};
int main() {
try {
// Get the type of MyClass.
Type* myType = __typeof(MyClass);
// Get the method information for MyFunc(int, int).
Type* temp0 [] = {__typeof(int), __typeof(int)};
MemberInfo* myMemberInfo = myType->GetMethod(S"MyFunc",
static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance),
0,
CallingConventions::Any,
temp0,
0);
Console::WriteLine(S"\nDisplaying information for MyFunc: \n");
// Display the method information.
Console::WriteLine(S"{0}", myMemberInfo);
} 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
.NET Framework セキュリティ:
- ReflectionPermission (非パブリック オブジェクトをリフレクション操作するために必要なアクセス許可) ReflectionPermissionFlag.TypeInformation (関連する列挙体)
参照
Type クラス | Type メンバ | System 名前空間 | Type.GetMethod オーバーロードの一覧 | MethodInfo | String | BindingFlags | Binder | DefaultBinder | CallingConventions | ParameterModifier | ReflectionPermission | GetMethodImpl | GetMethods