Export (0) Print
Expand All

MethodInfo.IsGenericMethodDefinition Property

Gets a value indicating whether the current MethodInfo represents the definition of a generic method.

Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)

public override bool IsGenericMethodDefinition { get; }
/** @property */
public boolean get_IsGenericMethodDefinition ()

public override function get IsGenericMethodDefinition () : boolean

Not applicable.

Property Value

true if the MethodInfo object represents the definition of a generic method; otherwise, false.

If the current MethodInfo represents a generic method definition, then:

Use the 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 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:

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 Int32. The IsGenericMethodDefinition property returns false for method N<V,int>.

NoteNote:

Although the open constructed method N<V,int> is not encountered when reflecting over class C, it must be generated using MakeGenericMethod 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:

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 IsGenericMethodDefinition property returns true for the MethodInfo that represents M.

For a list of the invariant conditions for terms specific to generic methods, see the IsGenericMethod property. For a list of the invariant conditions for other terms used in generic reflection, see the IsGenericType property.

The following code example uses the IsGenericMethodDefinition property to display a message indicating whether a MethodInfo represents a generic method definition.

This example is part of a larger example provided for the MakeGenericMethod method.

Console.WriteLine("\tIs this a generic method definition? {0}", 
    mi.IsGenericMethodDefinition);

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0

.NET Compact Framework

Supported in: 2.0

XNA Framework

Supported in: 1.0

Community Additions

ADD
Show:
© 2014 Microsoft