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 объекта в массиве.
- Возвращается Type.IsGenericParameter свойство
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 .