Gets a value indicating whether the current System.Reflection.MethodInfo represents the definition of a generic method.
true if the System.Reflection.MethodInfo object represents the definition of a generic method; otherwise false.
If the current System.Reflection.MethodInfo represents a generic method definition, then:
MethodInfo.IsGenericMethodDefinition returns true.
For each Type object in the array returned by the MethodInfo.GetGenericArguments method:
Use the MethodInfo.IsGenericMethodDefinition property to determine whether type arguments have been assigned to the type parameters of a generic method. If type arguments have been assigned, the MethodInfo.IsGenericMethodDefinition property returns false even if some of the type arguments are Type objects that represent type parameters of enclosing types. For example, consider the following C#, Visual Basic, and C++ code:
Example
class C { T N<T,U>(T t, U u) {...} public V M<V>(V v) { return N<V,int>(v, 42); } } 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 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); } };
The method body of M contains a call to method N, specifying the type parameter of M and the type int. The MethodInfo.IsGenericMethodDefinition property returns false for method N<V,int>.
Although the open constructed method N<V,int> is not encountered when reflecting over class C, it must be generated using MethodInfo.MakeGenericMethod(Type[]) in order to emit C as a dynamic class.
If a generic method definition includes generic parameters of the declaring type, there will be a generic method definition specific to each constructed type. For example, consider the following C# and Visual Basic code:
Example
class B<U,V> {} class C<T> { public B<T,S> M<S>() {...}} 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 generic <typename U, typename V> ref class B {}; generic <typename T> ref class C { public: generic <typename S> B<T,S>^ M() {...}; };
In the constructed type C<int> (C(Of Integer) in Visual Basic), the generic method M returns B<int, S>. In the open type C<T>, M returns B<T, S>. In both cases, the MethodInfo.IsGenericMethodDefinition property returns true for the System.Reflection.MethodInfo that represents M.
For a list of the invariant conditions for terms specific to generic methods, see the MethodInfo.IsGenericMethod property. For a list of the invariant conditions for other terms used in generic reflection, see the Type.IsGenericType property.