MethodInfo.IsGenericMethodDefinition Proprietà

Definizione

Ottiene un valore che indica se la classe MethodInfo corrente rappresenta la definizione di un metodo generico.

public:
 virtual property bool IsGenericMethodDefinition { bool get(); };
public override bool IsGenericMethodDefinition { get; }
member this.IsGenericMethodDefinition : bool
Public Overrides ReadOnly Property IsGenericMethodDefinition As Boolean

Valore della proprietà

Boolean

true se l'oggetto MethodInfo rappresenta la definizione di un metodo generico; in caso contrario, false.

Esempio

Nell'esempio di codice seguente viene IsGenericMethodDefinition utilizzata la proprietà per visualizzare un messaggio che indica se un oggetto rappresenta una definizione di metodo MethodInfo generico.

Questo esempio fa parte di un esempio più ampio fornito per il MakeGenericMethod metodo .

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);

Commenti

Se l'oggetto MethodInfo corrente rappresenta una definizione di metodo generico, eseguire le seguenti attività:

Utilizzare la IsGenericMethodDefinition proprietà per determinare se gli argomenti di tipo sono stati assegnati ai parametri di tipo di un metodo generico. Se sono stati assegnati argomenti di tipo, la proprietà restituisce false anche se alcuni argomenti di tipo sono oggetti che rappresentano parametri di IsGenericMethodDefinition Type tipo dei tipi contenitore. Si consideri ad esempio il codice 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);
    }
};
```

Il corpo del metodo di M contiene una chiamata al metodo N, specificando il parametro di tipo M e il tipo Int32 . La IsGenericMethodDefinition proprietà restituisce false per il metodo N<V,int> .

Nota

Anche se il metodo costruito aperto non viene rilevato durante la reflection sulla classe C, deve essere generato usando per generare N<V,int> MakeGenericMethod C come classe dinamica.

Se una definizione di metodo generico include parametri generici del tipo dichiarante, sarà presente una definizione di metodo generico specifica per ogni tipo costruito. Si consideri ad esempio il codice C # e Visual Basic seguente:

```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() {...};
};
```

Nel tipo costruito C<int> ( C(Of Integer) in Visual Basic), il metodo generico M restituisce B<int, S> . Nel tipo aperto C<T> M restituisce B<T, S> . In entrambi i casi, IsGenericMethodDefinition la proprietà restituisce per true MethodInfo l'oggetto che rappresenta M.

Per un elenco delle condizioni invarianti per termini specifici dei metodi generici, vedere la IsGenericMethod proprietà . Per un elenco delle condizioni invarianti per altri termini usati nella reflection generica, vedere la IsGenericType proprietà .

Si applica a

Vedi anche