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

属性值

如果 MethodInfo 对象表示泛型方法的定义,则为 true;否则为 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使用 属性可确定类型参数是否已分配给泛型方法的类型参数。 如果已分配类型参数,则 IsGenericMethodDefinition 即使某些类型参数是 Type 表示封闭类型类型参数的对象,该属性也会返回 false。 例如,请考虑以下 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。 方法 IsGenericMethodDefinitionN<V,int>属性返回 false。

注意

尽管在类 C 上反射时未遇到开放式构造方法 N<V,int> ,但必须使用 生成 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() {...};
};
```

在 Visual Basic) 的构造类型 C<int> (C(Of Integer) 中,泛型方法 M 返回 B<int, S>。 在打开的类型 C<T>中,M 返回 B<T, S>。 在这两种情况下, IsGenericMethodDefinition 属性将 true 返回 MethodInfo 表示 M 的 。

有关特定于泛型方法的术语的固定条件列表,请参阅 IsGenericMethod 属性。 有关泛型反射中使用的其他术语的固定条件列表,请参阅 IsGenericType 属性。

适用于

另请参阅