Condividi tramite


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à

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

Esempio

Nell'esempio di codice seguente viene utilizzata la IsGenericMethodDefinition proprietà per visualizzare un messaggio che indica se un MethodInfo oggetto rappresenta una definizione di metodo 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 corrente MethodInfo rappresenta una definizione di metodo generico, procedere come illustrato di seguito:

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 IsGenericMethodDefinition proprietà restituisce false anche se alcuni degli argomenti di tipo sono Type oggetti che rappresentano parametri di tipo di tipi di inclusione. Si consideri ad esempio il codice C#, Visual Basic e C++ seguente:

```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 N<V,int> costruito aperto non viene rilevato quando si riflette sulla classe C, deve essere generato usando MakeGenericMethod per generare C come classe dinamica.

Se una definizione di metodo generico include parametri generici del tipo dichiarante, sarà presente una definizione di metodo generica 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 C<int> costruito (C(Of Integer) in Visual Basic), il metodo generico M restituisce B<int, S>. Nel tipo C<T>aperto , M restituisce B<T, S>. In entrambi i casi, la IsGenericMethodDefinition proprietà restituisce true per l'oggetto MethodInfo che rappresenta M.

Per un elenco delle condizioni invarianti per i 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