MethodInfo.GetGenericMethodDefinition Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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í obecnou metodou. 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 poskytnutého pro metodu MakeGenericMethod .
// 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 = 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 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 metody vytvořit. Například z obecné definice T M<T>(T t) metody (vyjádřená v syntaxi jazyka C#; Function M(Of T)(ByVal tVal As T) As T v jazyce Visual Basic) můžete sestavit 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 představujícímu tuto konstruovanou metodu GetGenericMethodDefinition vrátí metoda definici obecné metody.
Pokud jsou vytvořeny dvě vytvořené metody ze stejné definice obecné metody, GetGenericMethodDefinition vrátí metoda stejný MethodInfo objekt pro obě metody.
Pokud zavoláte GetGenericMethodDefinitionMethodInfo , který již představuje obecnou definici metody, vrátí aktuální MethodInfo.
Pokud definice obecné metody obsahuje obecné parametry deklarujícího typu, bude existovat obecná definice metody specifická pro každý vytvořený typ. Představte si například následující kód:
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
V konstruovaný typ C<int> (C(Of Integer) v jazyce Visual Basic), obecná metoda M vrátí B<int, S>. V otevřeném typu C<T>vrátí M hodnotu B<T, S>. V oboupřípadechch IsGenericMethodDefinitiontrueMethodInfoMMakeGenericMethodMethodInfo V případě vytvořeného typu je MethodInfo výsledkem volání MakeGenericMethod volání, které lze vyvolat. V případě otevřeného typu MethodInfo nelze vyvolat vrácený objektem MakeGenericMethod .
Seznam invariantních podmínek pro podmínky specifické pro obecné metody naleznete ve IsGenericMethod vlastnosti. Seznam invariantních podmínek pro jiné termíny použité v obecné reflexi naleznete vlastnost IsGenericType .