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 dem Code, der erforderlich ist, um eine MethodInfo für die -Methode abzurufen, die Methode an die Typargumente zu binden und die ursprüngliche generische Typdefinition von der gebundenen Methode zurückzuholen.
Dieses Beispiel ist Teil eines größeren Beispiels, das für die MakeGenericMethod -Methode bereitgestellt 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; 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 eine MethodInfo aufrufenGetGenericMethodDefinition, die bereits eine generische Methodendefinition darstellt, wird die aktuelle MethodInfozurü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. 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 C<int>
(C(Of Integer)
in Visual Basic) gibt die generische Methode M
zurück B<int, S>
. Im geöffneten Typ C<T>
M
gibt zurückB<T, S>
. In beiden Fällen gibt die IsGenericMethodDefinition -Eigenschaft für das zurück true
, das MethodInfo darstellt M
, sodass MakeGenericMethod für beide MethodInfo Objekte aufgerufen werden kann. Im Fall des konstruierten Typs ist das Ergebnis des Aufrufs MakeGenericMethod ein MethodInfo , das aufgerufen werden kann. Im Fall des offenen Typs kann der MethodInfo zurückgegebene von MakeGenericMethod 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 Reflexion verwendet werden, finden Sie in der IsGenericType -Eigenschaft.