MethodInfo.IsGenericMethodDefinition Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera wartość wskazującą, czy bieżący MethodInfo reprezentuje definicję metody ogólnej.
public:
virtual property bool IsGenericMethodDefinition { bool get(); };
public override bool IsGenericMethodDefinition { get; }
member this.IsGenericMethodDefinition : bool
Public Overrides ReadOnly Property IsGenericMethodDefinition As Boolean
Wartość właściwości
true
MethodInfo jeśli obiekt reprezentuje definicję metody ogólnej; w przeciwnym razie false.
Przykłady
Poniższy przykład kodu używa IsGenericMethodDefinition właściwości do wyświetlania komunikatu wskazującego, czy MethodInfo reprezentuje definicję metody ogólnej.
Ten przykład jest częścią większego przykładu udostępnionego MakeGenericMethod dla metody .
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);
Uwagi
Jeśli bieżący MethodInfo reprezentuje definicję metody ogólnej, wówczas:
IsGenericMethodDefinitionzwraca wartośćtrue.Dla każdego Type obiektu w tablicy zwróconej przez metodę GetGenericArguments() :
- Właściwość Type.IsGenericParameter zwraca wartość
true. - Funkcja Type.DeclaringMethod zwraca bieżący MethodInfoelement .
- Właściwość Type.GenericParameterPosition jest taka sama jak pozycja Type obiektu w tablicy.
- Właściwość Type.IsGenericParameter zwraca wartość
IsGenericMethodDefinition Użyj właściwości , aby określić, czy argumenty typu zostały przypisane do parametrów typu metody ogólnej. Jeśli argumenty typu zostały przypisane, właściwość zwraca wartość false, IsGenericMethodDefinition nawet jeśli niektóre argumenty typu są Type obiektami reprezentującymi parametry typu ujętych typów. Rozważmy na przykład następujący kod:
```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);
}
};
```
Treść metody języka M zawiera wywołanie metody N, określając parametr typu M i typ Int32. Właściwość IsGenericMethodDefinition zwraca wartość false dla metody N<V,int>.
Uwaga / Notatka
Mimo że metoda otwarta skonstruowana N<V,int> nie jest spotykana podczas odzwierciedlania klasy C, należy ją wygenerować przy użyciu MakeGenericMethod metody w celu emitowania języka C jako klasy dynamicznej.
Jeśli definicja metody ogólnej zawiera ogólne parametry typu deklarowanego, będzie istnieć definicja metody ogólnej specyficzna dla każdego skonstruowanego typu. Rozważmy na przykład następujący kod:
```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() {...};
};
```
W skonstruowanym typie C<int> (C(Of Integer) w Visual Basic), metoda ogólna M zwraca B<int, S>. W typie otwartym funkcja C<T>M zwraca wartość B<T, S>. W obu przypadkach IsGenericMethodDefinition właściwość zwraca true wartość dla elementu reprezentującego MethodInfo język M.
Aby uzyskać listę niezmiennych warunków dotyczących warunków specyficznych dla metod ogólnych, zobacz IsGenericMethod właściwość . Aby uzyskać listę niezmiennych warunków dla innych terminów używanych w odbiciu ogólnym, zobacz IsGenericType właściwość .