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#表されます。Visual Basic) では、メソッドint M<int>(int t) (Function M(Of Integer)(ByVal tVal As Integer) As Integer Visual Basic) を構築して呼び出すことができます。 Function M(Of T)(ByVal tVal As T) As TFor 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>では、 MB<T, S>を返します。In the open type C<T>, M returns B<T, S>. どちらの場合も、 IsGenericMethodDefinitionを表すtrue MMethodInfoプロパティはを返します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.

適用対象

こちらもご覧ください