MethodInfo.IsGenericMethodDefinition Propriedade

Definição

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 da propriedade

true se o MethodInfo objeto representar 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 representa uma MethodInfo 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 a atual MethodInfo representa uma definição de método genérico, então:

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 se alguns dos argumentos de tipo forem Type objetos que representam parâmetros de tipo de tipos delimitados. 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 M e o tipo Int32. A IsGenericMethodDefinition propriedade retorna false para o método N<V,int>.

Note

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:

```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 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.

Aplica-se a

Confira também