MethodInfo.GetGenericMethodDefinition Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Retourneert een MethodInfo object dat een algemene methodedefinitie vertegenwoordigt waaruit de huidige methode kan worden samengesteld.
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
Retouren
Een MethodInfo object dat een algemene methodedefinitie vertegenwoordigt waaruit de huidige methode kan worden samengesteld.
- Kenmerken
Uitzonderingen
De huidige methode is geen algemene methode. Dat wil gezegd, IsGenericMethod retourneert false.
Deze methode wordt niet ondersteund.
Voorbeelden
In het volgende codevoorbeeld ziet u een klasse met een algemene methode en de code die is vereist om een MethodInfo voor de methode te verkrijgen, de methode te binden aan het typen van argumenten en de oorspronkelijke algemene typedefinitie terug te halen van de afhankelijke methode.
Dit voorbeeld maakt deel uit van een groter voorbeeld dat is opgegeven voor de MakeGenericMethod methode.
// 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)
Opmerkingen
Een algemene methodedefinitie is een sjabloon waaruit methoden kunnen worden samengesteld. U kunt bijvoorbeeld vanuit de algemene methodedefinitie T M<T>(T t) (uitgedrukt in C#-syntaxis; Function M(Of T)(ByVal tVal As T) As T in Visual Basic) de methode maken en aanroepen int M<int>(int t) (Function M(Of Integer)(ByVal tVal As Integer) As Integer in Visual Basic). Uitgaande van een MethodInfo object dat deze samengestelde methode vertegenwoordigt, retourneert de GetGenericMethodDefinition methode de algemene methodedefinitie.
Als twee samengestelde methoden worden gemaakt op basis van dezelfde algemene methodedefinitie, retourneert de GetGenericMethodDefinition methode hetzelfde MethodInfo object voor beide methoden.
Als u een aanroept GetGenericMethodDefinition die al een algemene methodedefinitie vertegenwoordigt, wordt de huidige MethodInfomethode geretourneerd.MethodInfo
Als een algemene methodedefinitie algemene parameters van het declaratietype bevat, is er een algemene methodedefinitie die specifiek is voor elk samengesteld type. Denk bijvoorbeeld aan de volgende 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
In het samengestelde type C<int> (C(Of Integer) in Visual Basic), retourneert de algemene methode MB<int, S>. Retourneert B<T, S>in het geopende type .C<T>M In beide gevallen retourneert de IsGenericMethodDefinition eigenschap voor de MethodInfo representatieM, zodat MakeGenericMethod deze op beide MethodInfo objecten kan worden aangeroepentrue. In het geval van het samengestelde type is het resultaat van het aanroepen een MethodInfo aanroep MakeGenericMethod die kan worden aangeroepen. In het geval van het open type kan het MethodInfo geretourneerde MakeGenericMethod type niet worden aangeroepen.
Zie de IsGenericMethod eigenschap voor een lijst met invariante voorwaarden voor voorwaarden die specifiek zijn voor algemene methoden. Zie de IsGenericType eigenschap voor een lijst met de invariante voorwaarden voor andere termen die in algemene reflectie worden gebruikt.