MethodInfo.IsGenericMethodDefinition Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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, false
v 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
vrátítrue
hodnotu .Pro každý Type objekt v poli vrácených metodou GetGenericArguments() :
Vlastnost Type.IsGenericParameter vrátí
true
.Vrátí Type.DeclaringMethod aktuální MethodInfohodnotu .
Vlastnost Type.GenericParameterPosition je stejná jako pozice objektu Type v poli.
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 .