Exporter (0) Imprimer
Développer tout

Type.InvokeMember, méthode (String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

En cas de substitution dans une classe dérivée, appelle le membre défini, à l'aide des contraintes de liaison spécifiées et correspondant à la liste d'arguments, aux modificateurs et à la culture spécifiés.

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

public abstract Object InvokeMember (
	string name,
	BindingFlags invokeAttr,
	Binder binder,
	Object target,
	Object[] args,
	ParameterModifier[] modifiers,
	CultureInfo culture,
	string[] namedParameters
)
public abstract Object InvokeMember (
	String name, 
	BindingFlags invokeAttr, 
	Binder binder, 
	Object target, 
	Object[] args, 
	ParameterModifier[] modifiers, 
	CultureInfo culture, 
	String[] namedParameters
)
public abstract function InvokeMember (
	name : String, 
	invokeAttr : BindingFlags, 
	binder : Binder, 
	target : Object, 
	args : Object[], 
	modifiers : ParameterModifier[], 
	culture : CultureInfo, 
	namedParameters : String[]
) : Object
Non applicable.

Paramètres

name

String contenant le nom du membre de constructeur, de méthode, de propriété ou de champ à appeler.

– ou –

Une chaîne vide ("") pour appeler le membre par défaut.

– ou –

Pour les membres IDispatch, chaîne représentant le DispID, par exemple "[DispID=3]".

invokeAttr

Masque de bits constitué d'un ou de plusieurs BindingFlags spécifiant le mode d'exécution de la recherche. L'accès peut être fourni par l'un des BindingFlags, par exemple Public, NonPublic, Private, InvokeMethod, GetField, etc. Il n'est pas nécessaire de spécifier le type de recherche. Si le type de recherche est omis, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static sont utilisés.

binder

Objet Binder 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. Notez que la définition explicite d'un objet Binder peut être requise pour appeler correctement des surcharges de méthode avec des arguments variables.

target

Object sur lequel le membre spécifié doit être appelé.

args

Tableau contenant les arguments à passer au membre à appeler.

modifiers

Tableau d'objets ParameterModifier représentant les attributs associés à l'élément correspondant dans le tableau args. Les attributs associés d'un paramètre sont stockés dans la signature du membre.

Le binder par défaut traite ce paramètre uniquement lors de l'appel d'un composant COM.

culture

Objet CultureInfo représentant le paramètre régional de globalisation à utiliser si nécessaire, notamment pour les conversions spécifiques aux paramètres régionaux comme la conversion d'un type numérique String en type Double.

– ou –

référence Null (Nothing en Visual Basic) pour utiliser les CultureInfo du thread en cours.

namedParameters

Tableau contenant les noms des paramètres auxquels les valeurs du tableau args sont passées.

Valeur de retour

Object représentant la valeur de retour du membre appelé.

Type d'exceptionCondition

ArgumentNullException

invokeAttr contient CreateInstance et typeName est référence Null (Nothing en Visual Basic).

ArgumentException

args est multidimensionnel.

– ou –

modifiers est multidimensionnel.

– ou –

args et modifiers n'ont pas la même longueur.

– ou –

invokeAttr n'est pas un attribut BindingFlags valide

– ou –

invokeAttr contient CreateInstance combiné avec InvokeMethod, GetField, SetField, GetProperty ou SetProperty.

– ou –

invokeAttr contient à la fois GetField et SetField.

– ou –

invokeAttr contient à la fois GetProperty et SetProperty.

– ou –

invokeAttr contient InvokeMethod combiné avec SetField ou SetProperty.

– ou –

invokeAttr contient SetField et args compte plusieurs éléments.

– ou –

Le tableau de paramètres nommé est plus grand que le tableau d'arguments.

– ou –

Cette méthode est appelée sur un objet COM et l'un des indicateurs de liaisons suivants n'a pas été passé : BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty ou BindingFlags.PutRefDispProperty.

– ou –

L'un des tableaux de paramètres nommés contient une chaîne qui est référence Null (Nothing en Visual Basic).

MethodAccessException

Le membre spécifié est un initialiseur de classe.

MissingFieldException

Impossible de trouver le champ ou la propriété.

MissingMethodException

La méthode est introuvable.

– ou –

L'objet Type actuel représente un type qui contient des paramètres de type ouverts, c'est-à-dire que ContainsGenericParameters retourne la valeur true.

TargetException

Le membre spécifié ne peut pas être appelé sur target.

AmbiguousMatchException

Plusieurs méthodes correspondent aux critères de liaison.

InvalidOperationException

La méthode représentée par name a un ou plusieurs paramètres de type générique non spécifiés. Autrement dit, sa propriété ContainsGenericParameters retourne true.

InvokeMember appelle un membre du constructeur ou un membre de méthode, obtient ou définit un membre de propriété, obtient ou définit un membre de champ de données, ou obtient ou définit un élément comme membre de tableau.

RemarqueRemarque :

Vous ne pouvez pas utiliser InvokeMember pour appeler une méthode générique.

Lorsque vous appelez un membre IDispatch, vous pouvez spécifier le DispID à la place du nom de membre à l'aide du format de chaîne "[DispID=##]". Par exemple, si le DispID de MyComMethod est 3, vous pouvez spécifier la chaîne "[DispID=3]" à la place de "MyComMethod". Il est plus rapide d'appeler un membre par DispID que de le rechercher par son nom. Dans des scénarios d'agrégation complexes, le DispID représente parfois la seule façon d'appeler le membre souhaité.

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

Les tableaux args et modifiers ont la même longueur. Un paramètre spécifié dans le tableau args peut avoir les attributs suivants, spécifiés dans le tableau modifiers : pdIn, pdOut, pdLcid, pdRetval, pdOptional et pdHasDefault, qui représentent [In], [Out], [lcid], [retval], [optional], et une valeur spécifiant si le paramètre a une valeur par défaut. Les attributs associés à un paramètre sont stockés dans les métadonnées et améliorent l'interopérabilité.

Chaque paramètre du tableau namedParameters obtient la valeur indiquée dans l'élément correspondant du tableau args. Si la longueur de args est supérieure à la longueur de namedParameters, les valeurs d'arguments restantes sont passées dans l'ordre.

Les indicateurs de filtre BindingFlags suivants peuvent être utilisés pour définir les membres à 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 membres publics dans la recherche.

  • Spécifiez BindingFlags.NonPublic pour inclure les membres non publics (c'est-à-dire les membres privés et protégés) dans la recherche.

  • Spécifiez BindingFlags.FlattenHierarchy pour inclure les membres statiques en haut de la hiérarchie.

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 membres déclarés dans Type et exclure ceux qui ont été simplement hérités.

Les indicateurs d'appel BindingFlags suivants peuvent être utilisés pour désigner l'action à effectuer sur le membre :

  • CreateInstance pour appeler un constructeur. name est ignoré. Non valide avec d'autres indicateurs d'appel.

  • InvokeMethod pour appeler une méthode, mais pas un constructeur ni un initialiseur de type. Non valide avec SetField ou SetProperty.

  • GetField pour obtenir la valeur d'un champ. Non valide avec SetField.

  • SetField pour définir la valeur d'un champ. Non valide avec GetField.

  • GetProperty pour obtenir une propriété. Non valide avec SetProperty.

  • SetProperty pour définir une propriété. Non valide avec GetProperty.

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

Une méthode est appelée si les conditions suivantes sont vérifiées :

  • Le nombre de paramètres de la déclaration de méthode est égal au nombre d'arguments du tableau args (à moins que le membre ne possède des arguments définis par défaut).

  • Le type de chaque argument peut être converti par le binder pour correspondre au type du paramètre.

Le binder va trouver toutes les méthodes correspondantes. Ces méthodes sont trouvées en fonction du type de liaison demandé (valeurs BindingFlags, InvokeMethod, GetProperty, etc.). L'ensemble des méthodes est filtré selon leur nom, leur nombre d'arguments et un ensemble de modificateurs de recherche définis dans le binder.

Une fois sélectionnée, la méthode est appelée. L'accessibilité est vérifiée à ce stade. La recherche peut contrôler quel ensemble de méthodes est analysé en fonction de l'attribut d'accessibilité associé à chaque méthode. La méthode Binder.BindToMethod de la classe Binder est chargée de sélectionner la méthode à appeler. Le binder par défaut sélectionne la correspondance la plus spécifique.

InvokeMember peut être utilisé pour appeler les méthodes dont les paramètres ont des valeurs par défaut. Pour lier ces méthodes, Reflection requiert que BindingFlags.OptionalParamBinding soit spécifié. Dans le cas d'un paramètre doté d'une valeur par défaut, vous pouvez soit fournir une valeur différente, soit fournir Missing.Value pour utiliser la valeur par défaut.

Prenez, par exemple, une méthode telle que MyMethod(int x, float y = 2.0). Pour appeler cette méthode en tant que MyMethod(4) avec uniquement le premier argument, passez un des indicateurs de liaisons ci-dessus, puis deux arguments, à savoir 4 pour le premier argument et Missing.Value pour le second argument. Sauf si vous utilisez Missing.Value, vous ne pouvez pas omettre les paramètres optionnels avec la méthode Invoke. Si vous y êtes contraint, utilisez InvokeMember à la place.

Les restrictions d'accès sont ignorées pour le code d'un niveau de confiance suffisant ; autrement dit, il est possible d'accéder et de faire appel à des constructeurs, méthodes, champs et propriétés privés via System.Reflection dès lors que le code est d'un niveau de confiance suffisant.

Vous pouvez utiliser Type.InvokeMember pour affecter une valeur spécifique à un champ en spécifiant BindingFlags.SetField. Par exemple, si vous voulez définir un champ d'instance public nommé F sur la classe C, et si F est String, vous pouvez utiliser le code suivant :

typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{"strings new value"}, null, null, null);

Si F est String[], vous pouvez utiliser le code suivant :

typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{new String[]{"a","z","c","d"}, null, null, null);

ce qui initialisera le champ F à ce nouveau tableau. De plus, vous pouvez utiliser Type.InvokeMember pour définir une position dans un tableau en fournissant l'index de la valeur puis la valeur suivante, à l'aide du code suivant :

typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{1, "b"}, null, null, null);

La chaîne "z" du tableau que F contient est remplacée par la chaîne "b".

Remarque sur la plateforme Windows Mobile 2003 pour Pocket PC, Windows Mobile 2003 pour Smartphone, Windows CE : Ce membre lève un NotSupportedException sur le .NET Compact Framework.

Windows 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Microsoft .NET Framework 3.0 est pris en charge sur Windows Vista, Microsoft Windows XP SP2 et Windows Server 2003 SP1.

.NET Framework

Prise en charge dans : 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Prise en charge dans : 2.0, 1.0

XNA Framework

Prise en charge dans : 1.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft