MethodInfo.IsGenericMethodDefinition Propriedade
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.
Obtém um valor que indica se a corrente MethodInfo representa a definição de um método genérico.
public:
virtual property bool IsGenericMethodDefinition { bool get(); };
public override bool IsGenericMethodDefinition { get; }
member this.IsGenericMethodDefinition : bool
Public Overrides ReadOnly Property IsGenericMethodDefinition As Boolean
Valor de Propriedade
true se o MethodInfo objeto representa a definição de um método genérico; caso contrário, false.
Exemplos
O exemplo de código seguinte usa a IsGenericMethodDefinition propriedade para mostrar uma mensagem indicando se a MethodInfo representa uma definição genérica de método.
Este exemplo faz parte de um exemplo maior fornecido para o MakeGenericMethod método.
Console.WriteLine(vbTab _
& "Is this a generic method definition? {0}", _
mi.IsGenericMethodDefinition)
Console.WriteLine("\tIs this a generic method definition? {0}",
mi.IsGenericMethodDefinition);
Console::WriteLine("\tIs this a generic method definition? {0}",
mi->IsGenericMethodDefinition);
Observações
Se a corrente MethodInfo representa uma definição genérica de método, então:
IsGenericMethodDefinitionretornatrue.Para cada Type objeto no array devolvido pelo GetGenericArguments() método:
- A Type.IsGenericParameter propriedade devolve
true. - O Type.DeclaringMethod devolve a corrente MethodInfo.
- A Type.GenericParameterPosition propriedade é a mesma que a posição do Type objeto no array.
- A Type.IsGenericParameter propriedade devolve
Use a IsGenericMethodDefinition propriedade para determinar se os argumentos de tipo foram atribuídos aos parâmetros de tipo de um método genérico. Se os argumentos de tipo forem atribuídos, a IsGenericMethodDefinition propriedade devolve false mesmo que alguns dos argumentos de tipo sejam Type objetos que representam parâmetros de tipo de tipos envolventes. Por exemplo, considere o seguinte código:
```csharp
class C
{
T N<T,U>(T t, U u) {...}
public V M<V>(V v)
{
return N<V,int>(v, 42);
}
}
```
```vb
Class C
Public Function N(Of T,U)(ByVal ta As T, ByVal ua As U) As T
...
End Function
Public Function M(Of V)(ByVal va As V ) As V
Return N(Of V, Integer)(va, 42)
End Function
End Class
```
```cpp
ref class C
{
private:
generic <typename T, typename U> T N(T t, U u) {...}
public:
generic <typename V> V M(V v)
{
return N<V, int>(v, 42);
}
};
```
O corpo do método de M contém uma chamada ao método N, especificando o parâmetro de tipo de M e o tipo Int32. A IsGenericMethodDefinition propriedade devolve false para o método N<V,int>.
Note
Embora o método N<V,int> construído aberto não seja encontrado ao refletir sobre a classe C, deve ser gerado usando MakeGenericMethod para emitir C como uma classe dinâmica.
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:
```csharp
class B<U,V> {}
class C<T> { public B<T,S> M<S>() {...}}
```
```vb
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
```
```cpp
generic <typename U, typename V> ref class B {};
generic <typename T> ref class C
{
public:
generic <typename S> B<T,S>^ M() {...};
};
```
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 retorna true para o MethodInfo que representa M.
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.