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
возвращаетtrue
.Для каждого Type объекта в массиве, возвращаемого методом :GetGenericArguments()
Свойство Type.IsGenericParameter возвращает значение
true
.Возвращает Type.DeclaringMethod текущий MethodInfoобъект .
Свойство Type.GenericParameterPosition совпадает с положением Type объекта в массиве.
Используйте свойство , 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 .