MethodInfo.GetGenericMethodDefinition Methode

Definitie

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.

Van toepassing op

Zie ook