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 urč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; jinak , false.
Příklady
Následující příklad kódu používá IsGenericMethodDefinition vlastnost k zobrazení zprávy označující, zda MethodInfo představuje definici obecné metody.
Tento příklad je součástí většího příkladu poskytnutého 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:
IsGenericMethodDefinitionvracítrue.Pro každý Type objekt v poli vrácené 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.
- Vlastnost Type.IsGenericParameter vrátí
IsGenericMethodDefinition Pomocí vlastnosti určete, zda byly argumenty typu přiřazeny k parametrům typu obecné metody. Pokud byly přiřazeny argumenty typu, IsGenericMethodDefinition vrátí vlastnost false, i když některé z argumentů typu jsou Type objekty, které představují parametry typu ohraničující typy. Představte si například následující kód:
```csharp
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 M obsahuje volání metody N, určení parametru typu M a typu Int32. Vlastnost IsGenericMethodDefinition vrátí hodnotu false pro metodu N<V,int>.
Note
I když otevřená konstruovaná metoda N<V,int> není zjištěna při reflektování nad třídou C, musí být generována pomocí MakeGenericMethod , aby bylo možné generovat jazyk C jako dynamickou třídu.
Pokud definice obecné metody obsahuje obecné parametry deklarujícího typu, bude existovat obecná definice metody specifická pro každý vytvořený typ. Představte si například následující kód:
```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() {...};
};
```
V konstruovaný typ C<int> (C(Of Integer) v Visual Basic), vrátí obecná metoda M B<int, S>. V otevřeném typu C<T>vrátí funkce B<T, S>M . V obou případech IsGenericMethodDefinition vrátí true vlastnost pro MethodInfo představující M.
Seznam invariantních podmínek pro podmínky specifické pro obecné metody naleznete ve IsGenericMethod vlastnosti. Seznam invariantních podmínek pro jiné termíny použité v obecné reflexi naleznete vlastnost IsGenericType .