MethodInfo.IsGenericMethodDefinition Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém um valor que indica se o MethodInfo atual 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 da 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 a seguir usa a IsGenericMethodDefinition
propriedade para exibir uma mensagem indicando se um MethodInfo representa uma definição de método genérico.
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);
Comentários
Se o atual MethodInfo representar uma definição de método genérico, então:
IsGenericMethodDefinition
retornatrue
.Para cada Type objeto na matriz retornada pelo GetGenericArguments() método :
A propriedade Type.IsGenericParameter retorna
true
.O Type.DeclaringMethod retorna o atual MethodInfo.
A Type.GenericParameterPosition propriedade é a mesma que a posição do Type objeto na matriz.
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 argumentos de tipo tiverem sido atribuídos, a IsGenericMethodDefinition
propriedade retornará false mesmo que alguns dos argumentos de tipo sejam Type objetos que representam parâmetros de tipo de tipos delimitados. Por exemplo, considere o seguinte código C#, Visual Basic e C++:
```cs
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 para o método N, especificando o parâmetro de tipo de M e o tipo Int32. A IsGenericMethodDefinition
propriedade retorna false para o método N<V,int>
.
Observação
Embora o método N<V,int>
aberto construído não seja encontrado ao refletir sobre a classe C, ele deve ser gerado usando MakeGenericMethod para emitir C como uma classe dinâmica.
Se uma definição de método genérico incluir parâmetros genéricos do tipo de declaração, haverá uma definição de método genérico específica para cada tipo construído. Por exemplo, considere o seguinte código C# e Visual Basic:
```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 C<int>
construído (C(Of Integer)
no Visual Basic), o método genérico M retorna B<int, S>
. No tipo C<T>
aberto , M retorna B<T, S>
. Em ambos os casos, a IsGenericMethodDefinition
propriedade retorna true
para o MethodInfo que representa M.
Para obter uma lista das condições invariáveis para termos específicos a métodos genéricos, consulte a IsGenericMethod propriedade . Para obter uma lista das condições invariáveis para outros termos usados na reflexão genérica, consulte a IsGenericType propriedade .