Поделиться через


MethodInfo.IsGenericMethodDefinition Свойство

Определение

Возвращает значение, указывающее, представляет ли текущий объект MethodInfo определение универсального метода.

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

Значение свойства

Значение true, если объект MethodInfo представляет определение универсального метода; в противном случае — значение false.

Примеры

В следующем примере кода свойство используется для IsGenericMethodDefinition отображения сообщения, указывающего, представляет ли MethodInfo объект определение универсального метода.

Этот пример является частью более крупного примера, предоставленного 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);

Комментарии

Если текущий MethodInfo представляет определение универсального метода, то:

Используйте свойство , IsGenericMethodDefinition чтобы определить, назначены ли аргументы типа параметрам типа универсального метода. Если аргументы типа назначены, свойство возвращает значение false, IsGenericMethodDefinition даже если некоторые из аргументов типа являются Type объектами, представляющими параметры типа включаемых типов. Например, рассмотрим следующий код C#, Visual Basic и 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);
    }
};
```

Тело метода M содержит вызов метода N, задающий параметр типа M и тип Int32. Свойство IsGenericMethodDefinition возвращает значение false для метода N<V,int>.

Примечание

Хотя открытый сконструированный метод N<V,int> не встречается при отражении по классу C, он должен быть создан с помощью MakeGenericMethod для создания C в качестве динамического класса.

Если определение универсального метода содержит универсальные параметры объявляющего типа, будет использоваться определение универсального метода, относяющееся к каждому сконструированному типу. Например, рассмотрим следующий код C# и 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() {...};
};
```

В созданном типе C<int> (C(Of Integer) в Visual Basic) универсальный метод M возвращает B<int, S>. В открытом типе C<T>M возвращает B<T, S>. В обоих случаях IsGenericMethodDefinition свойство возвращает true значение для объекта MethodInfo , представляющего M.

Список инвариантных условий для терминов, относящихся к универсальным методам, см. в свойстве IsGenericMethod . Список инвариантных условий для других терминов, используемых в универсальном отражении, см. в свойстве IsGenericType .

Применяется к

См. также раздел