Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Type.DeclaringMethod propriété

 

Date de publication : novembre 2016

Obtient un MethodBase représentant la méthode de déclaration, si le Type actuel représente un paramètre de type d'une méthode générique.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public virtual MethodBase DeclaringMethod { get; }

Valeur de propriété

Type: System.Reflection.MethodBase

Si le Type actuel représente un paramètre de type d'une méthode générique, MethodBase qui représente la méthode de déclaration ; sinon, null.

The declaring method is a generic method definition. That is, if P:System.Type.DeclaringMethod does not return null, then DeclaringMethod.IsGenericMethodDefinition returns true.

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

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

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

  • Getting the P:System.Type.DeclaringMethod property on a type whose P:System.Type.IsGenericParameter property is false throws an T:System.InvalidOperationException.

The T:System.Reflection.MethodBase that is returned by the P:System.Type.DeclaringMethod property is either a T:System.Reflection.MethodInfo in the case of a generic method, or a T:System.Reflection.ConstructorInfo in the case of a generic constructor.

System_CAPS_noteRemarque

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 P:System.Type.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 P:System.Type.DeclaringMethod property for the method's generic type parameter.

using System;
using System.Reflection;

// Define a class with a generic method.
public class Example
{
    public static void Generic<T>(T toDisplay)
    {
        Console.WriteLine("\r\nHere it is: {0}", toDisplay);
    }
}

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Examine a generic method.");

        // Create a Type object representing class Example, and
        // get a MethodInfo representing the generic method.
        //
        Type ex = typeof(Example);
        MethodInfo mi = ex.GetMethod("Generic");

        DisplayGenericMethodInfo(mi);

        // Assign the int type to the type parameter of the Example 
        // method.
        //
        MethodInfo miConstructed = mi.MakeGenericMethod(typeof(int));

        DisplayGenericMethodInfo(miConstructed);

        // Invoke the method.
        object[] args = {42};
        miConstructed.Invoke(null, args);

        // Invoke the method normally.
        Example.Generic<int>(42);

        // Get the generic type definition from the closed method,
        // and show it's the same as the original definition.
        //
        MethodInfo miDef = miConstructed.GetGenericMethodDefinition();
        Console.WriteLine("\r\nThe definition is the same: {0}",
            miDef == mi);
    }

    private static void DisplayGenericMethodInfo(MethodInfo mi)
    {
        Console.WriteLine("\r\n{0}", mi);

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

        Console.WriteLine("\tIs it a generic method? {0}", 
            mi.IsGenericMethod);

        Console.WriteLine("\tDoes it have unassigned generic parameters? {0}", 
            mi.ContainsGenericParameters);

        // If this is a generic method, display its type arguments.
        //
        if (mi.IsGenericMethod)
        {
            Type[] typeArguments = mi.GetGenericArguments();

            Console.WriteLine("\tList type arguments ({0}):", 
                typeArguments.Length);

            foreach (Type tParam in typeArguments)
            {
                // IsGenericParameter is true only for generic type
                // parameters.
                //
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine("\t\t{0}  parameter position {1}" +
                        "\n\t\t   declaring method: {2}",
                        tParam,
                        tParam.GenericParameterPosition,
                        tParam.DeclaringMethod);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
    }
}

/* 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
Disponible depuis 2.0
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Retour au début
Afficher: