Expand Minimize

Type.DeclaringMethod Property

Gets a MethodBase that represents the declaring method, if the current Type represents a type parameter of a generic method.

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

'Declaration
Public Overridable ReadOnly Property DeclaringMethod As MethodBase

Property Value

Type: System.Reflection.MethodBase
If the current Type represents a type parameter of a generic method, a MethodBase that represents declaring method; otherwise, Nothing.

The declaring method is a generic method definition. That is, if DeclaringMethod does not return Nothing, then DeclaringMethod.IsGenericMethodDefinition returns true.

The DeclaringType and DeclaringMethod properties identify the generic type definition or generic method definition in which the generic type parameter was originally defined:

  • If the DeclaringMethod property returns a MethodInfo, that MethodInfo represents a generic method definition, and the current Type object represents a type parameter of that generic method definition.

  • If the DeclaringMethod property returns Nothing, then the DeclaringType property always returns a Type object representing a generic type definition, and the current Type object represents a type parameter of that generic type definition.

  • Getting the DeclaringMethod property on a type whose IsGenericParameter property is false throws an InvalidOperationException.

The MethodBase that is returned by the DeclaringMethod property is either a MethodInfo in the case of a generic method, or a ConstructorInfo in the case of a generic constructor.

NoteNote

In the .NET Framework version 2.0, generic constructors are not supported.

For a list of the invariant conditions for terms used in generic reflection, see the IsGenericType property remarks.

The following code example defines a class that has a generic method, assigns a type argument to the method, and invokes the resulting constructed generic method. It also displays information about the generic method definition and the constructed method. When displaying information about the type parameters of the generic method definition, in the DisplayGenericMethodInfo method, the example code shows the value of the DeclaringMethod property for the method's generic type parameter.

Imports System
Imports System.Reflection

' Define a class with a generic method. 
Public Class Example
    Public Shared Sub Generic(Of T)(ByVal toDisplay As T)
        Console.WriteLine(vbCrLf & "Here it is: {0}", toDisplay)
    End Sub 
End Class 

Public Class Test
    Public Shared Sub Main() 
        Console.WriteLine(vbCrLf & "--- Examine a generic method.")

        ' Create a Type object representing class Example, and 
        ' get a MethodInfo representing the generic method. 
        
        Dim ex As Type = GetType(Example)
        Dim mi As MethodInfo = ex.GetMethod("Generic")

        DisplayGenericMethodInfo(mi)

        ' Assign the Integer type to the type parameter of the Example  
        ' method. 
        
        Dim arguments() As Type = { GetType(Integer) }
        Dim miConstructed As MethodInfo = mi.MakeGenericMethod(arguments)

        DisplayGenericMethodInfo(miConstructed)

        ' Invoke the method. 
        Dim args() As Object = { 42 }
        miConstructed.Invoke(Nothing, args)

        ' Invoke the method normally.
        Example.Generic(Of Integer)(42)

        ' Get the generic type definition from the constructed method, 
        ' and show that it's the same as the original definition. 
        
        Dim miDef As MethodInfo = miConstructed.GetGenericMethodDefinition()
        Console.WriteLine(vbCrLf & "The definition is the same: {0}", _
            miDef Is mi)
    End Sub 'Main

    Private Shared Sub DisplayGenericMethodInfo(ByVal mi As MethodInfo) 
        Console.WriteLine(vbCrLf & mi.ToString())

        Console.WriteLine(vbTab _
            & "Is this a generic method definition? {0}", _
            mi.IsGenericMethodDefinition)

        Console.WriteLine(vbTab & "Is it a generic method? {0}", _
            mi.IsGenericMethod)

        Console.WriteLine(vbTab _
            & "Does it have unassigned generic parameters? {0}", _
            mi.ContainsGenericParameters)

        ' If this is a generic method, display its type arguments. 
        
        If mi.IsGenericMethod Then 
            Dim typeArguments As Type() = mi.GetGenericArguments()

            Console.WriteLine(vbTab & "List type arguments ({0}):", _
                typeArguments.Length)

            For Each tParam As Type In typeArguments
                ' IsGenericParameter is true only for generic type 
                ' parameters. 
                
                If tParam.IsGenericParameter Then
                    Console.WriteLine(vbTab & vbTab _
                        & "{0}  parameter position: {1}" _
                        & vbCrLf & vbTab & vbTab _
                        & "   declaring method: {2}", _
                        tParam,  _
                        tParam.GenericParameterPosition, _
                        tParam.DeclaringMethod)
                Else
                    Console.WriteLine(vbTab & vbTab & tParam.ToString())
                End If 
            Next tParam
        End If 
    End Sub  
End Class  

' This example produces the following output: 

'--- Examine a generic method. 

'Void Generic[T](T) 
'        Is this a generic method definition? True 
'        Is it a generic method? True 
'        Does it have unassigned generic parameters? True 
'        List type arguments (1): 
'                T  parameter position: 0 
'                   declaring method: Void Generic[T](T) 

'Void Generic[Int32](Int32) 
'        Is this a generic method definition? False 
'        Is it a generic method? True 
'        Does it have unassigned generic parameters? False 
'        List type arguments (1): 
'                System.Int32 

'Here it is: 42 

'Here it is: 42 

'The definition is the same: True 
'

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft