MethodInfo.IsGenericMethodDefinition 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个值,该值指示当前 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 属性确定类型参数是否已分配给泛型方法的类型参数。 如果已分配类型参数,则即使某些类型参数是Type表示封闭类型的类型参数的对象,IsGenericMethodDefinition该属性也会返回 false。 例如,考虑以下代码:
```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。 对于方法N<V,int>,该IsGenericMethodDefinition属性返回 false。
Note
尽管在类 C 上反射时未遇到开放式构造方法 N<V,int> ,但必须使用 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) in Visual Basic),泛型方法 M 返回 B<int, S>。 在打开的类型 C<T>中,M 返回 B<T, S>。 在这两种情况下,属性IsGenericMethodDefinitiontrue返回MethodInfo表示 M 的属性。
有关特定于泛型方法的术语的固定条件的列表,请参阅该 IsGenericMethod 属性。 有关泛型反射中使用的其他术语的固定条件的列表,请参阅该 IsGenericType 属性。