Udostępnij za pośrednictwem


MethodInfo.IsGenericMethodDefinition Właściwość

Definicja

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 , aby wyświetlić komunikat wskazujący, czy obiekt 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:

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 otaczającego typów. Rozważmy na przykład następujący kod C#, Visual Basic i 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);
    }
};
```

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

Mimo że metoda N<V,int> open constructed nie jest napotkana podczas odzwierciedlania w klasie C, należy ją wygenerować przy użyciu metody MakeGenericMethod 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 w językach C# i 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() {...};
};
```

W skonstruowanym typie C<int> (C(Of Integer) w Visual Basic) metoda ogólna języka M zwraca wartość B<int, S>. W typie otwierania 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ść .

Dotyczy

Zobacz też