Sdílet prostřednictvím


MethodInfo.IsGenericMethodDefinition Vlastnost

Definice

Získá hodnotu označující, zda aktuální MethodInfo představuje definici obecné metody.

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

Hodnota vlastnosti

true MethodInfo pokud objekt představuje definici obecné metody, falsev opačném případě .

Příklady

Následující příklad kódu používá IsGenericMethodDefinition vlastnost k zobrazení zprávy, která označuje, zda MethodInfo představuje definici obecné metody.

Tento příklad je součástí většího příkladu pro metodu MakeGenericMethod .

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

Poznámky

Pokud aktuální MethodInfo představuje definici obecné metody, pak:

IsGenericMethodDefinition Pomocí vlastnosti určete, zda byly argumenty typu přiřazeny parametrům typu obecné metody. Pokud byly přiřazeny argumenty typu, vrátí vlastnost hodnotu false i v případě, IsGenericMethodDefinition že některé argumenty typu jsou Type objekty, které představují parametry typu nadřazených typů. Představte si například následující kód jazyka C#, Visual Basic a 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);
    }
};
```

Tělo metody jazyka M obsahuje volání metody N, která určuje parametr typu M a typ Int32. Vlastnost IsGenericMethodDefinition vrátí hodnotu false pro metodu N<V,int>.

Poznámka

Ačkoli otevřená vytvořená metoda N<V,int> není nalezena při reflexi nad třídou C, musí být vygenerována pomocí MakeGenericMethod , aby bylo možné vygenerovat C jako dynamickou třídu.

Pokud definice obecné metody obsahuje obecné parametry deklarujícího typu, bude existovat definice obecné metody specifické pro každý vytvořený typ. Představte si například následující kód jazyka C# a 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() {...};
};
```

Ve vytvořeném typu C<int> (C(Of Integer) v jazyce Visual Basic) vrátí obecná metoda M .B<int, S> V otevřeném typu C<T>vrátí B<T, S>M . V obou případech IsGenericMethodDefinition vrátí true vlastnost , MethodInfo která představuje M.

Seznam invariantních podmínek pro podmínky specifické pro obecné metody najdete ve IsGenericMethod vlastnosti . Seznam neutrálních podmínek pro jiné termíny použité v obecné reflexi najdete ve IsGenericType vlastnosti .

Platí pro

Viz také