MethodInfo.GetGenericMethodDefinition Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt ein MethodInfo-Objekt zurück, das eine generische Methodendefinition darstellt, aus der die aktuelle Methode konstruiert 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 konstruiert werden kann.
- Attribute
Ausnahmen
Die aktuelle Methode ist keine generische Methode. Das heißt, IsGenericMethod gibt false zurück.
Diese Methode wird nicht unterstützt.
Beispiele
Das folgende Codebeispiel zeigt eine Klasse mit einer generischen Methode und den Code, der erforderlich ist, um ein für die Methode zu erhalten, die Methode an Typargumente zu binden und die ursprüngliche generische Typdefinition von der gebundenen Methode zurück MethodInfo zu erhalten.
Dieses Beispiel ist Teil eines größeren Beispiels, das für die -Methode bereitgestellt MakeGenericMethod wird.
// 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)
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 C#-Syntax; in Visual Basic) die -Methode erstellen und aufrufen Function M(Of T)(ByVal tVal As T) As T ( in int M<int>(int t) Function M(Of Integer)(ByVal tVal As Integer) As Integer Visual Basic). Bei einem MethodInfo Objekt, das diese konstruierte Methode darstellt, gibt GetGenericMethodDefinition die Methode die generische Methodendefinition zurück.
Wenn zwei konstruierte Methoden aus derselben generischen Methodendefinition erstellt werden, gibt die Methode das gleiche Objekt GetGenericMethodDefinition MethodInfo für beide Methoden zurück.
Wenn Sie für GetGenericMethodDefinition eine MethodInfo aufrufen, die bereits eine generische Methodendefinition darstellt, wird die aktuelle MethodInfo zurückgegeben.
Wenn eine generische Methodendefinition generische Parameter des deklarativen Typs enthält, gibt es eine generische Methodendefinition, die für jeden konstruierten Typ spezifisch ist. Betrachten Sie beispielsweise den folgenden C#-, Visual Basic- und C++-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
generic <typename U, typename V> ref class B {};
generic <typename T> ref class C
{
public:
generic <typename S> B<T,S>^ M() {...};
};
Im konstruierten Typ ( in Visual Basic) gibt C<int> die generische Methode C(Of Integer) M B<int, S> zurück. Im offenen Typ gibt C<T> M B<T, S> zurück. In beiden Fällen gibt die -Eigenschaft für den zurück, IsGenericMethodDefinition true der MethodInfo M darstellt, sodass für beide Objekte aufgerufen MakeGenericMethod werden MethodInfo kann. Im Fall des konstruierten Typs ist das Ergebnis des Aufrufs eine , MakeGenericMethod MethodInfo die aufgerufen werden kann. Im Fall des offenen Typs kann der von MethodInfo MakeGenericMethod zurückgegebene nicht aufgerufen werden.
Eine Liste der invarianten Bedingungen für Begriffe, die für generische Methoden spezifisch sind, finden Sie in der IsGenericMethod -Eigenschaft. Eine Liste der invarianten Bedingungen für andere Begriffe, die in der generischen Reflektion verwendet werden, finden Sie in der IsGenericType -Eigenschaft.