Compartilhar via


MethodInfo.IsGenericMethodDefinition Propriedade

Definição

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:

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 .

Aplica-se a

Confira também