MethodInfo.GetGenericMethodDefinition MethodInfo.GetGenericMethodDefinition MethodInfo.GetGenericMethodDefinition MethodInfo.GetGenericMethodDefinition Method

定義

現在のメソッドを構築する元になるジェネリック メソッド定義を表す MethodInfo オブジェクトを返します。Returns a MethodInfo object that represents a generic method definition from which the current method can be constructed.

public:
 virtual System::Reflection::MethodInfo ^ GetGenericMethodDefinition();
[System.Runtime.InteropServices.ComVisible(true)]
public virtual System.Reflection.MethodInfo GetGenericMethodDefinition ();
abstract member GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
override this.GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
Public Overridable Function GetGenericMethodDefinition () As MethodInfo

戻り値

現在のメソッドを構築する元になるジェネリック メソッド定義を表す MethodInfo オブジェクト。A MethodInfo object representing a generic method definition from which the current method can be constructed.

例外

現在のメソッドはジェネリック メソッドではありません。The current method is not a generic method. つまり、IsGenericMethodfalse を返します。That is, IsGenericMethod returns false.

このメソッドはサポートされていません。This method is not supported.

次のコード例は、ジェネリック メソッドと取得に必要なコードを持つクラスを示しています、MethodInfo方法の場合、メソッドの引数の型にバインドし、元のジェネリック型定義を関連付けられたメソッドから戻る。The following code example shows a class with a generic method and the code required to obtain a MethodInfo for the method, bind the method to type arguments, and get the original generic type definition back from the bound method.

この例が示されている例の一部、MakeGenericMethodメソッド。This example is part of a larger example provided for the MakeGenericMethod method.

// Define a class with a generic method.
ref class Example
{
public:
    generic<typename T> static void Generic(T toDisplay)
    {
        Console::WriteLine("\r\nHere it is: {0}", toDisplay);
    }
};
// Define a class with a generic method.
public class Example
{
    public static void Generic<T>(T toDisplay)
    {
        Console.WriteLine("\r\nHere it is: {0}", toDisplay);
    }
}
' Define a class with a generic method.
Public Class Example
    Public Shared Sub Generic(Of T)(ByVal toDisplay As T)
        Console.WriteLine(vbCrLf & "Here it is: {0}", toDisplay)
    End Sub
End Class
// Create a Type object representing class Example, and
// get a MethodInfo representing the generic method.
//
Type^ ex = Example::typeid;
MethodInfo^ mi = ex->GetMethod("Generic");

DisplayGenericMethodInfo(mi);

// Assign the int type to the type parameter of the Example 
// method.
//
MethodInfo^ miConstructed = mi->MakeGenericMethod(int::typeid);

DisplayGenericMethodInfo(miConstructed);
// Create a Type object representing class Example, and
// get a MethodInfo representing the generic method.
//
Type ex = typeof(Example);
MethodInfo mi = ex.GetMethod("Generic");

DisplayGenericMethodInfo(mi);

// Assign the int type to the type parameter of the Example 
// method.
//
MethodInfo miConstructed = mi.MakeGenericMethod(typeof(int));

DisplayGenericMethodInfo(miConstructed);
' Create a Type object representing class Example, and
' get a MethodInfo representing the generic method.
'
Dim ex As Type = GetType(Example)
Dim mi As MethodInfo = ex.GetMethod("Generic")

DisplayGenericMethodInfo(mi)

' Assign the Integer type to the type parameter of the Example 
' method.
'
Dim arguments() As Type = { GetType(Integer) }
Dim miConstructed As MethodInfo = mi.MakeGenericMethod(arguments)

DisplayGenericMethodInfo(miConstructed)
// Get the generic type definition from the closed method,
// and show it's the same as the original definition.
//
MethodInfo^ miDef = miConstructed->GetGenericMethodDefinition();
Console::WriteLine("\r\nThe definition is the same: {0}",
        miDef == mi);
// Get the generic type definition from the closed method,
// and show it's the same as the original definition.
//
MethodInfo miDef = miConstructed.GetGenericMethodDefinition();
Console.WriteLine("\r\nThe definition is the same: {0}",
    miDef == mi);
' Get the generic type definition from the constructed method,
' and show that it's the same as the original definition.
'
Dim miDef As MethodInfo = miConstructed.GetGenericMethodDefinition()
Console.WriteLine(vbCrLf & "The definition is the same: {0}", _
    miDef Is mi)

注釈

ジェネリック メソッド定義は、メソッドを構築するためのテンプレートです。A generic method definition is a template from which methods can be constructed. たとえば、ジェネリック メソッド定義からT M<T>(T t)(c# の構文で表現します。Function M(Of T)(ByVal tVal As T) As T Visual Basic で) 作成してメソッドを呼び出すint M<int>(int t)(Function M(Of Integer)(ByVal tVal As Integer) As Integer Visual Basic で)。For example, from the generic method definition T M<T>(T t) (expressed in C# syntax; Function M(Of T)(ByVal tVal As T) As T in Visual Basic) you can construct and invoke the method int M<int>(int t) (Function M(Of Integer)(ByVal tVal As Integer) As Integer in Visual Basic). 指定された、MethodInfoこれを表すオブジェクトが構築されるメソッドをGetGenericMethodDefinitionメソッドがジェネリック メソッド定義を返します。Given a MethodInfo object representing this constructed method, the GetGenericMethodDefinition method returns the generic method definition.

同じジェネリック メソッド定義から構築された 2 つのメソッドが作成された場合、GetGenericMethodDefinitionメソッドは、同じを返しますMethodInfo両方のメソッドのオブジェクト。If two constructed methods are created from the same generic method definition, the GetGenericMethodDefinition method returns the same MethodInfo object for both methods.

呼び出す場合GetGenericMethodDefinition上、MethodInfoを既にジェネリック メソッド定義を表す、現在を返しますMethodInfoします。If you call GetGenericMethodDefinition on a MethodInfo that already represents a generic method definition, it returns the current MethodInfo.

ジェネリック メソッド定義には、宣言型のジェネリック パラメーターが含まれている場合がありますジェネリック メソッド定義を各構築型を特定します。If a generic method definition includes generic parameters of the declaring type, there will be a generic method definition specific to each constructed type. たとえば、次の c#、Visual Basic、および C++ コードを考えてみます。For example, consider the following C#, Visual Basic, and C++ code:

class B<U,V> {}  
class C<T> { public B<T,S> M<S>() {...}}  

Class B(Of U, V)  
End Class  
Class C(Of T)  
    Public Function M(Of S)() As B(Of T, S)  
        ...  
    End Function  
End Class   

generic <typename U, typename V> ref class B {};  
generic <typename T> ref class C  
{  
public:  
    generic <typename S> B<T,S>^ M() {...};  
};  

構築された型でC<int>(C(Of Integer) Visual Basic で)、ジェネリック メソッドM返しますB<int, S>します。In the constructed type C<int> (C(Of Integer) in Visual Basic), the generic method M returns B<int, S>. オープン型でC<T>M返しますB<T, S>します。In the open type C<T>, M returns B<T, S>. どちらの場合で、IsGenericMethodDefinitionプロパティが返すtrueMethodInfoを表すMため、MakeGenericMethod両方で呼び出すことができますMethodInfoオブジェクト。In both cases, the IsGenericMethodDefinition property returns true for the MethodInfo that represents M, so MakeGenericMethod can be called on both MethodInfo objects. 構築された型の呼び出しの結果MakeGenericMethodは、MethodInfoを呼び出すことができます。In the case of the constructed type, the result of calling MakeGenericMethod is a MethodInfo that can be invoked. オープンの型の場合、MethodInfoによって返されるMakeGenericMethod呼び出すことができません。In the case of the open type, the MethodInfo returned by MakeGenericMethod cannot be invoked.

ジェネリック メソッドに固有の用語に対するインバリアント条件の一覧を参照してください、IsGenericMethodプロパティ。For a list of the invariant conditions for terms specific to generic methods, see the IsGenericMethod property. ジェネリック リフレクションで使用されるその他の用語に対するインバリアント条件の一覧を参照して、IsGenericTypeプロパティ。For a list of the invariant conditions for other terms used in generic reflection, see the IsGenericType property.

適用対象

こちらもご覧ください