MethodInfo.GetGenericMethodDefinition Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Returnerar ett MethodInfo objekt som representerar en allmän metoddefinition som den aktuella metoden kan konstrueras från.
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
Returer
Ett MethodInfo objekt som representerar en allmän metoddefinition som den aktuella metoden kan konstrueras från.
- Attribut
Undantag
Den aktuella metoden är inte en allmän metod. Det vill: IsGenericMethod returnerar false.
Den här metoden stöds inte.
Exempel
I följande kodexempel visas en klass med en generisk metod och den kod som krävs för att hämta en MethodInfo för metoden, binda metoden till att skriva argument och få tillbaka den ursprungliga generiska typdefinitionen från den bundna metoden.
Det här exemplet är en del av ett större exempel för MakeGenericMethod metoden.
// 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)
Kommentarer
En allmän metoddefinition är en mall som metoder kan konstrueras från. Från den allmänna metoddefinitionen T M<T>(T t) (uttryckt i C#-syntax, Function M(Of T)(ByVal tVal As T) As T i Visual Basic) kan du till exempel konstruera och anropa metoden int M<int>(int t) (Function M(Of Integer)(ByVal tVal As Integer) As Integer i Visual Basic). Med tanke på ett MethodInfo objekt som representerar den här konstruerade metoden GetGenericMethodDefinition returnerar metoden den generiska metoddefinitionen.
Om två konstruerade metoder skapas från samma generiska metoddefinition GetGenericMethodDefinition returnerar metoden samma MethodInfo objekt för båda metoderna.
Om du anropar GetGenericMethodDefinition en MethodInfo som redan representerar en allmän metoddefinition returnerar den aktuella MethodInfo.
Om en allmän metoddefinition innehåller generiska parametrar av deklareringstypen finns det en allmän metoddefinition som är specifik för varje konstruerad typ. Tänk till exempel på följande kod:
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
I den konstruerade typen C<int> (C(Of Integer) i Visual Basic) returnerar den generiska metoden MB<int, S>. I den öppna typen C<T>returnerar . MB<T, S> I båda fallen IsGenericMethodDefinition returnerar true egenskapen för MethodInfo som representerar M, så MakeGenericMethod kan anropas på båda MethodInfo objekten. När det gäller den konstruerade typen är resultatet av anropet MakeGenericMethod ett MethodInfo som kan anropas. När det gäller den öppna typen kan den MethodInfo som returneras av MakeGenericMethod inte anropas.
En lista över de invarianta villkoren för termer som är specifika för generiska metoder finns i IsGenericMethod egenskapen . En lista över de invarianta villkoren för andra termer som används i allmän reflektion IsGenericType finns i egenskapen .