Sdílet prostřednictvím


MethodInfo.GetGenericMethodDefinition Metoda

Definice

MethodInfo Vrátí objekt, který představuje obecnou definici metody, ze které lze vytvořit aktuální metodu.

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

Návraty

Objekt MethodInfo představující definici obecné metody, ze které lze vytvořit aktuální metodu.

Atributy

Výjimky

Aktuální metoda není obecná metoda. To znamená, IsGenericMethod že vrátí false.

Tato metoda není podporována.

Příklady

Následující příklad kódu ukazuje třídu s obecnou metodou a kód potřebný k získání MethodInfo metody, vytvoření vazby metody na typ argumentů a získání původní definice obecného typu zpět z vázané metody.

Tento příklad je součástí většího příkladu, který je k dispozici pro metodu MakeGenericMethod .

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

Poznámky

Definice obecné metody je šablona, ze které lze vytvořit metody. Například z definice T M<T>(T t) obecné metody (vyjádřené v syntaxi jazyka C#; Function M(Of T)(ByVal tVal As T) As T v jazyce Visual Basic) můžete vytvořit a vyvolat metodu int M<int>(int t) (Function M(Of Integer)(ByVal tVal As Integer) As Integer v jazyce Visual Basic). Vzhledem k objektu MethodInfo , který představuje tuto vytvořenou metodu GetGenericMethodDefinition , vrátí metoda definici obecné metody.

Pokud jsou ze stejné definice obecné metody vytvořeny dvě vytvořené metody, GetGenericMethodDefinition vrátí metoda stejný MethodInfo objekt pro obě metody.

Pokud zavoláte GetGenericMethodDefinition na objekt, MethodInfo který již představuje definici obecné metody, vrátí aktuální MethodInfohodnotu .

Pokud definice obecné metody obsahuje obecné parametry deklarujícího typu, bude existovat definice obecné metody specifické pro každý vytvořený typ. Představte si například následující kód jazyka C#, Visual Basic a C++:

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

Ve vytvořeném typu C<int> (C(Of Integer) v jazyce Visual Basic) vrátí B<int, S>obecná metoda M . V otevřeném typu C<T>M vrátí hodnotu B<T, S>. V obou případech IsGenericMethodDefinition vrátí vlastnost hodnotu MethodInfo , která představuje M, takže MakeGenericMethod může být volána u obou MethodInfo objektů.true V případě vytvořeného typu je výsledkem volání MakeGenericMethod objekt MethodInfo , který lze vyvolat. V případě typu MethodInfo open nelze vyvolat vrácený MakeGenericMethod objekt.

Seznam invariantních podmínek pro podmínky specifické pro obecné metody najdete ve IsGenericMethod vlastnosti. Seznam invariantních podmínek pro jiné termíny používané v obecné reflexi najdete ve IsGenericType vlastnosti .

Platí pro

Viz také