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 объектами, представляющими параметры типа вложенных типов. Например, рассмотрим следующий код:

 ```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);
    }
};
```

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

Note

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

Если определение универсального метода включает универсальные параметры декларающего типа, будет определение универсального метода, определенное для каждого созданного типа. Например, рассмотрим следующий код:

```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>возвращается B<T, S>M. В обоих случаях IsGenericMethodDefinition свойство возвращается true для объекта MethodInfo , представляющего M.

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

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

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