MethodInfo.GetGenericMethodDefinition Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Devolve um MethodInfo objeto que representa uma definição genérica de método a partir da qual o método atual pode ser construído.
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
Devoluções
Um MethodInfo objeto que representa uma definição genérica de método a partir da qual o método atual pode ser construído.
- Atributos
Exceções
O método atual não é genérico. Ou seja, IsGenericMethod retorna false.
Este método não é suportado.
Exemplos
O exemplo de código seguinte mostra uma classe com um método genérico e o código necessário para obter um MethodInfo para o método, vincular o método aos argumentos de tipagem e obter a definição original do tipo genérico de volta do método bound.
Este exemplo faz parte de um exemplo maior fornecido para o MakeGenericMethod método.
// 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)
Observações
Uma definição genérica de método é um modelo a partir do qual métodos podem ser construídos. Por exemplo, a partir da definição genérica do método T M<T>(T t) (expressa em sintaxe C#; Function M(Of T)(ByVal tVal As T) As T em Visual Basic) pode-se construir e invocar o método int M<int>(int t) (Function M(Of Integer)(ByVal tVal As Integer) As Integer em Visual Basic). Dado um MethodInfo objeto que representa este método construído, o GetGenericMethodDefinition método devolve a definição genérica do método.
Se dois métodos construídos forem criados a partir da mesma definição genérica de método, o GetGenericMethodDefinition método devolve o mesmo MethodInfo objeto para ambos os métodos.
Se chamar GetGenericMethodDefinition um MethodInfo que já representa uma definição genérica de método, ele devolve o atual MethodInfo.
Se uma definição genérica de método incluir parâmetros genéricos do tipo declarante, haverá uma definição genérica específica para cada tipo construído. Por exemplo, considere o seguinte código:
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
No tipo construído C<int> (C(Of Integer) em Visual Basic), o método genérico M devolve B<int, S>. No tipo C<T>aberto , M devolve B<T, S>. Em ambos os casos, a IsGenericMethodDefinition propriedade devolve true para o MethodInfo que representa M, pelo que MakeGenericMethod pode ser chamada em ambos MethodInfo os objetos. No caso do tipo construído, o resultado de chamar MakeGenericMethod é um MethodInfo que pode ser invocado. No caso do tipo aberto, o devolvido MethodInfo por MakeGenericMethod não pode ser invocado.
Para uma lista das condições invariantes para termos específicos de métodos genéricos, veja a IsGenericMethod propriedade. Para uma lista das condições invariantes para outros termos usados na reflexão genérica, veja a IsGenericType propriedade.