Partager via


MethodInfo.GetGenericMethodDefinition Méthode

Définition

Retourne un objet MethodInfo qui représente une définition de méthode générique à partir de laquelle la méthode actuelle peut être construite.

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

Retours

Objet MethodInfo représentant une définition de méthode générique à partir de laquelle la méthode actuelle peut être construite.

Attributs

Exceptions

La méthode actuelle est une méthode générique. Autrement dit, IsGenericMethod retourne false.

Cette méthode n'est pas prise en charge.

Exemples

L’exemple de code suivant montre une classe avec une méthode générique et le code requis pour obtenir un MethodInfo pour la méthode, lier la méthode à des arguments de type et récupérer la définition de type générique d’origine à partir de la méthode liée.

Cet exemple fait partie d’un exemple plus grand fourni pour la MakeGenericMethod méthode .

// 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)

Remarques

Une définition de méthode générique est un modèle à partir duquel les méthodes peuvent être construites. Par exemple, à partir de la définition T M<T>(T t) de méthode générique (exprimée en syntaxe C# ; Function M(Of T)(ByVal tVal As T) As T en Visual Basic), vous pouvez construire et appeler la méthode int M<int>(int t) (Function M(Of Integer)(ByVal tVal As Integer) As Integer en Visual Basic). Étant donné un MethodInfo objet représentant cette méthode construite, la GetGenericMethodDefinition méthode retourne la définition de méthode générique.

Si deux méthodes construites sont créées à partir de la même définition de méthode générique, la GetGenericMethodDefinition méthode retourne le même MethodInfo objet pour les deux méthodes.

Si vous appelez GetGenericMethodDefinition sur un MethodInfo qui représente déjà une définition de méthode générique, il retourne le actuel MethodInfo.

Si une définition de méthode générique inclut des paramètres génériques du type déclarant, il existe une définition de méthode générique spécifique à chaque type construit. Par exemple, considérez le code C#, Visual Basic et C++ suivant :

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() {...};
};

Dans le type C<int> construit (C(Of Integer) en Visual Basic), la méthode M générique retourne B<int, S>. Dans le type C<T>ouvert , M retourne B<T, S>. Dans les deux cas, la IsGenericMethodDefinition propriété retourne true pour le MethodInfo qui représente M, peut donc MakeGenericMethod être appelé sur les deux MethodInfo objets. Dans le cas du type construit, le résultat de l’appel MakeGenericMethod est un MethodInfo qui peut être appelé. Dans le cas du type ouvert, le MethodInfo retourné par MakeGenericMethod ne peut pas être appelé.

Pour obtenir la liste des conditions invariantes pour les termes spécifiques aux méthodes génériques, consultez la IsGenericMethod propriété . Pour obtenir la liste des conditions invariantes pour les autres termes utilisés dans la réflexion générique, consultez la IsGenericType propriété .

S’applique à

Voir aussi