Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Type.GetMethod, méthode (String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

Recherche la méthode spécifiée dont les paramètres correspondent aux types d'arguments et aux modificateurs spécifiés, en utilisant les contraintes de liaison et la convention d'appel indiquées.

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

public MethodInfo GetMethod(
	string name,
	BindingFlags bindingAttr,
	Binder binder,
	CallingConventions callConvention,
	Type[] types,
	ParameterModifier[] modifiers
)

Paramètres

name
Type : System.String
Chaîne contenant le nom de la méthode à obtenir.
bindingAttr
Type : System.Reflection.BindingFlags
Masque de bits constitué d'un ou de plusieurs BindingFlags spécifiant le mode d'exécution de la recherche.
ou
Zéro, pour retourner null.
binder
Type : System.Reflection.Binder
Objet qui définit un ensemble de propriétés et permet la liaison, ce qui peut impliquer la sélection d'une méthode surchargée, la contrainte de types d'arguments et l'appel d'un membre par la réflexion.
ou
Référence null (Nothing en Visual Basic) pour utiliser DefaultBinder.
callConvention
Type : System.Reflection.CallingConventions
Objet qui spécifie l'ensemble de règles à utiliser en ce qui concerne l'ordre et la disposition des arguments, la manière dont la valeur de retour est passée, les registres utilisés pour les arguments et la manière dont la pile est nettoyée.
types
Type : System.Type[]
Tableau d'objets Type représentant le nombre, l'ordre et le type des paramètres de la méthode à obtenir.
ou
Tableau vide d'objets Type (tels que le champ EmptyTypes les fournit) pour obtenir une méthode qui ne prend aucun paramètre.
modifiers
Type : System.Reflection.ParameterModifier[]
Tableau d'objets ParameterModifier représentant les attributs associés à l'élément correspondant dans le tableau types. À utiliser uniquement lors d'un appel via COM Interop ; de plus, seuls sont gérés les paramètres passés par référence. Le binder par défaut ne traite pas ce paramètre.

Valeur de retour

Type : System.Reflection.MethodInfo
Objet qui représente la méthode correspondant aux critères spécifiés, si elle est trouvée ; sinon, null.

Implémentations

_Type.GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

ExceptionCondition
AmbiguousMatchException

Il existe plusieurs méthodes portant le nom spécifié et correspondant aux contraintes de liaison spécifiées.

ArgumentNullException

name a la valeur null.

ou

types a la valeur null.

ou

Un des éléments dans types est null.

ArgumentException

types est multidimensionnel.

ou

modifiers est multidimensionnel.

Bien que le binder par défaut ne traite pas ParameterModifier (le paramètre modifiers), vous pouvez utiliser la classe abstraite System.Reflection.Binder pour écrire un binder personnalisé qui traite modifiers. ParameterModifier est utilisé uniquement lors d'un appel via COM Interop ; de plus, seuls sont gérés les paramètres passés par référence.

Le tableau suivant indique les membres d'une classe de base qui sont retournés par les méthodes GetXXX lors de la réflexion sur un type.

Type de membre

Statique

Non statique

Constructeur

Non

Non

Champ

Non

Oui. Un champ est toujours masqué-par-nom-et-signature.

Événement

Non applicable

La règle du système de type commun (CTS, Common Type System) est que l'héritage est le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous.

Méthode

Non

Oui. Une méthode (à la fois virtuelle et non virtuelle) peut être masquée par nom ou masquée-par-nom-et-signature.

De type imbriqué

Non

Non

Propriété

Non applicable

La règle du système de type commun (CTS, Common Type System) est que l'héritage est le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous.

  1. Masquer-par-nom-et-signature prend en compte toutes les parties de la signature, y compris les modificateurs personnalisés, les types de retour, les types de paramètres, les sentinelles et les conventions d'appel non managées. Il s'agit d'une comparaison binaire.

  2. Pour la réflexion, les propriétés et événements sont masqués-par-nom-et-signature. Si une propriété a un accesseur get et set dans la classe de base, mais si la classe dérivée n'a qu'un accesseur get, la propriété de la classe dérivée masque la propriété de la classe de base et vous ne pourrez pas accéder à l'accesseur Set sur la classe de base.

  3. Les attributs personnalisés ne font pas partie du système de type commun (CTS, Common Type System).

Les indicateurs de filtre BindingFlags suivants peuvent être utilisés pour définir les méthodes à inclure dans la recherche :

  • Vous devez spécifier soit BindingFlags.Instance, soit BindingFlags.Static pour obtenir un retour.

  • Spécifiez BindingFlags.Public pour inclure les méthodes publiques dans la recherche.

  • Spécifiez BindingFlags.NonPublic pour inclure des méthodes non publiques (c'est-à-dire des méthodes privées, internes et protégées) dans la recherche.

  • Spécifiez BindingFlags.FlattenHierarchy pour inclure les membres statiques public et protected en haut de la hiérarchie ; les membres statiques private dans les classes héritées ne sont pas inclus.

Les indicateurs de modificateur BindingFlags suivants peuvent être utilisés pour modifier le fonctionnement de la recherche :

  • BindingFlags.IgnoreCase pour ignorer la casse de name.

  • BindingFlags.DeclaredOnly pour limiter la recherche aux méthodes déclarées dans Type et exclure celles qui ont été simplement héritées.

Pour plus d'informations, consultez System.Reflection.BindingFlags.

RemarqueRemarque

Vous ne pouvez pas omettre de paramètres lorsque vous cherchez les constructeurs et méthodes. Vous pouvez uniquement omettre les paramètres lors de l'appel.

Si le T:System.Type actuel représente un type générique construit, cette méthode retourne MethodInfo où les paramètres de type sont remplacés par les arguments de type appropriés.

Si le Type actuel représente un paramètre de type dans la définition d'un type ou d'une méthode générique, cette méthode recherche les méthodes de la contrainte de classe, ou les méthodes de Object, s'il n'existe aucune contrainte de classe.

RemarqueRemarque

Pour les méthodes génériques, n'incluez pas les arguments de type dans name. Par exemple, le code C# GetMember("MyMethod<int>") recherche un membre portant le nom textuel "MyMethod<int>" plutôt qu'une méthode nommée MyMethod qui possède un argument générique de type int.

L'exemple suivant recherche des surcharges spécifiques de MethodA, en spécifiant des contraintes de liaison, des conventions d'appel et divers types d'arguments.

RemarqueRemarque

L'exemple Visual C# 2005 requiert l'option du compilateur /unsafe.



using System;
using System.Reflection;

class Program
{
    // Methods to get:

    public void MethodA(int i, int j) { }

    public void MethodA(int[] i) { }

    public unsafe void MethodA(int* i) { }

    public void MethodA(ref int r) {}

    // Method that takes an out parameter:
    public void MethodA(int i, out int o) { o = 100;}


  static void Main(string[] args)
  {
    MethodInfo mInfo;

    // Get MethodA(int i, int j)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int), typeof(int) },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int[] i)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int[]) },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int* i)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int).MakePointerType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(ref int r)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int).MakeByRefType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int i, out int o)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int), typeof(int).MakeByRefType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

  }
}


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

.NET pour les applications Windows Phone

Pris en charge dans : 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 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft