Freigeben über


MethodInfo.GetGenericMethodDefinition Methode

Definition

Gibt ein MethodInfo Objekt zurück, das eine generische Methodendefinition darstellt, aus der die aktuelle Methode erstellt werden kann.

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

Gibt zurück

Ein MethodInfo Objekt, das eine generische Methodendefinition darstellt, aus der die aktuelle Methode erstellt werden kann.

Attribute

Ausnahmen

Die aktuelle Methode ist keine generische Methode. Das heißt, IsGenericMethod gibt zurück false.

Diese Methode wird nicht unterstützt.

Beispiele

Das folgende Codebeispiel zeigt eine Klasse mit einer generischen Methode und dem Code, der erforderlich ist, um eine MethodInfo für die Methode abzurufen, die Methode an Typargumente zu binden und die ursprüngliche generische Typdefinition aus der gebundenen Methode zurückzugeben.

Dieses Beispiel ist Teil eines größeren Beispiels, das für die MakeGenericMethod Methode bereitgestellt wird.

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

Hinweise

Eine generische Methodendefinition ist eine Vorlage, aus der Methoden erstellt werden können. Beispielsweise können Sie aus der generischen Methodendefinition T M<T>(T t) (ausgedrückt in der C#-Syntax; Function M(Of T)(ByVal tVal As T) As T in Visual Basic) die Methode int M<int>(int t) erstellen und aufrufen (Function M(Of Integer)(ByVal tVal As Integer) As Integer in Visual Basic). Bei einem MethodInfo Objekt, das diese konstruierte Methode darstellt, gibt die GetGenericMethodDefinition Methode die generische Methodendefinition zurück.

Wenn zwei konstruierte Methoden aus derselben generischen Methodendefinition erstellt werden, gibt die GetGenericMethodDefinition Methode dasselbe MethodInfo Objekt für beide Methoden zurück.

Wenn Sie einen Aufruf ausführen GetGenericMethodDefinitionMethodInfo , der bereits eine generische Methodendefinition darstellt, wird der aktuelle MethodInfoWert zurückgegeben.

Wenn eine generische Methodendefinition generische Parameter des deklarierenden Typs enthält, gibt es eine generische Methodendefinition, die für jeden konstruierten Typ spezifisch ist. Stellen Sie sich beispielsweise den folgende Code vor:

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

Im konstruierten Typ C<int> (C(Of Integer) in Visual Basic) gibt die generische Methode M zurück B<int, S>. Gibt im geöffneten Typ C<T>zurückB<T, S>M. In beiden Fällen gibt true die IsGenericMethodDefinition Eigenschaft für dasMethodInfo, was darstelltM, zurück, sodass MakeGenericMethod beide MethodInfo Objekte aufgerufen werden können. Im Fall des konstruierten Typs ist das Ergebnis des Aufrufs ein MethodInfo AufrufMakeGenericMethod, der aufgerufen werden kann. Im Fall des geöffneten Typs kann der MethodInfo zurückgegebene Von MakeGenericMethod nicht aufgerufen werden.

Eine Liste der invarianten Bedingungen für begriffe, die spezifisch für generische Methoden sind, finden Sie in der IsGenericMethod Eigenschaft. Eine Liste der invarianten Bedingungen für andere Begriffe, die in generischer Spiegelung verwendet werden, finden Sie in der IsGenericType Eigenschaft.

Gilt für:

Weitere Informationen