Type.InvokeMember Type.InvokeMember Type.InvokeMember Method

Définition

Appelle un membre spécifique du Type actuel.Invokes a specific member of the current Type.

Surcharges

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(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.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[])

Appelle le membre défini, à l'aide des contraintes de liaison spécifiées et correspondant à la liste d'arguments spécifiée.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Appelle le membre spécifié, à l'aide des contraintes de liaison spécifiées et correspondant à la liste d'arguments et à la culture spécifiées.Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(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.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

public:
 abstract System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
public abstract object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj

Paramètres

name
String String String

Chaîne contenant le nom du membre de constructeur, de méthode, de propriété ou de champ à appeler.The string containing the name of the constructor, method, property, or field member to invoke.

- ou --or- Une chaîne vide ("") pour appeler le membre par défaut.An empty string ("") to invoke the default member.

- ou --or- Pour les membres IDispatch, chaîne représentant le DispID, par exemple "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Combinaison de bits de valeurs d’énumération qui spécifie la façon dont est effectuée la recherche.A bitwise combination of the enumeration values that specify how the search is conducted. L'accès peut être fourni par l'un des BindingFlags, par exemple Public, NonPublic, Private, InvokeMethod, GetField, etc.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Il n'est pas nécessaire de spécifier le type de recherche.The type of lookup need not be specified. Si le type de recherche est omis, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static sont utilisés.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder 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.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

- ou --or- Référence null (Nothing en Visual Basic) pour utiliser DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Notez que la définition explicite d'un objet Binder peut être nécessaire pour appeler correctement des surcharges de méthode avec des arguments variables.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Objet sur lequel appeler le membre spécifié.The object on which to invoke the specified member.

args
Object[]

Tableau contenant les arguments à passer au membre à appeler.An array containing the arguments to pass to the member to invoke.

modifiers
ParameterModifier[]

Tableau d'objets ParameterModifier représentant les attributs associés à l'élément correspondant dans le tableau args.An array of ParameterModifier objects representing the attributes associated with the corresponding element in the args array. Les attributs associés d'un paramètre sont stockés dans la signature du membre.A parameter's associated attributes are stored in the member's signature.

Le binder par défaut traite ce paramètre uniquement au moment de l'appel d'un composant COM.The default binder processes this parameter only when calling a COM component.

culture
CultureInfo CultureInfo CultureInfo

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.The CultureInfo object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

- ou --or- Référence null (Nothing en Visual Basic) pour utiliser le CultureInfo du thread actuel.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

namedParameters
String[]

Tableau contenant les noms des paramètres auxquels les valeurs du tableau args sont passées.An array containing the names of the parameters to which the values in the args array are passed.

Retours

Objet représentant la valeur de retour du membre appelé.An object representing the return value of the invoked member.

Implémente

Exceptions

invokeAttr ne contient pas CreateInstance et name est null.invokeAttr does not contain CreateInstance and name is null.

args et modifiers n’ont pas la même longueur.args and modifiers do not have the same length.

- ou --or- invokeAttr n’est pas un attribut BindingFlags valide.invokeAttr is not a valid BindingFlags attribute.

- ou --or- invokeAttr ne contient pas l’un des indicateurs de liaison suivants : InvokeMethod, CreateInstance, GetField, SetField, GetProperty ou SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contient CreateInstance combiné avec InvokeMethod, GetField, SetField, GetProperty ou SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

ou-or- invokeAttr contient à la fois GetField et SetField.invokeAttr contains both GetField and SetField.

- ou --or- invokeAttr contient à la fois GetProperty et SetProperty.invokeAttr contains both GetProperty and SetProperty.

- ou --or- invokeAttr contient InvokeMethod combiné avec SetField ou SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- ou --or- invokeAttr contient SetField et args a plusieurs éléments.invokeAttr contains SetField and args has more than one element.

- ou --or- Le tableau de paramètres nommé est supérieur à un tableau d’arguments.The named parameter array is larger than the argument array.

- ou --or- 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.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

ou-or- L’un des tableaux de paramètres nommés contient une chaîne qui est null.One of the named parameter arrays contains a string that is null.

Le membre spécifié est un initialiseur de classe.The specified member is a class initializer.

Le champ ou la propriété est introuvable.The field or property cannot be found.

Aucune méthode ne peut être trouvée qui correspond aux arguments de args.No method can be found that matches the arguments in args.

ou-or- Aucun membre ne peut être trouvé avec les noms des arguments fournis dans namedParameters.No member can be found that has the argument names supplied in namedParameters.

- ou --or- L’objet Type actuel représente un type qui contient les paramètres de type ouverts, à savoir, ContainsGenericParameters retourne true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Le membre spécifié ne peut pas être appelé sur target.The specified member cannot be invoked on target.

Plusieurs méthodes correspondent aux critères de liaison.More than one method matches the binding criteria.

La méthode représentée par name a un ou plusieurs paramètres de type générique non spécifiés.The method represented by name has one or more unspecified generic type parameters. Autrement dit, la propriété ContainsGenericParameters de la méthode retourne true.That is, the method's ContainsGenericParameters property returns true.

Remarques

InvokeMemberappelle un membre de 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 d’un membre de tableau.InvokeMember calls a constructor member or a method member, gets or sets a property member, gets or sets a data field member, or gets or sets an element of an array member.

Notes

Vous ne pouvez InvokeMember pas utiliser pour appeler une méthode générique.You cannot use InvokeMember to invoke a generic method.

Quand vous appelez un IDispatch membre, vous pouvez spécifier le DispId à la place du nom de membre à l’aide du format de chaîne "[DISPID = # #]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Par exemple, si le DispID de MyComMethod est 3, vous pouvez spécifier la chaîne « [DispID = 3] » au lieu de « MyComMethod ».For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". L’appel d’un membre par DispID est plus rapide que la recherche du membre par nom.Invoking a member by DispID is faster than looking up the member by name. Dans les scénarios d’agrégation complexes, le DispID est parfois le seul moyen d’appeler le membre souhaité.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Bien que le binder par défaut ne traite ParameterModifier pas CultureInfo ou ( modifiers les culture paramètres et), vous pouvez utiliser la System.Reflection.Binder classe abstraite pour écrire un Binder personnalisé qui traite modifiers et culture.Although the default binder does not process ParameterModifier or CultureInfo (the modifiers and culture parameters), you can use the abstract System.Reflection.Binder class to write a custom binder that does process modifiers and culture. ParameterModifierest utilisé uniquement lors de l’appel par le biais de COM Interop, et seuls les paramètres passés par référence sont gérés.ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

Chaque paramètre dans le tableau namedParameters obtient la valeur de l’élément correspondant dans le tableau args.Each parameter in the namedParameters array gets the value in the corresponding element in the args array. Si la longueur de args est supérieure à la longueur de namedParameters, les valeurs d’argument restantes sont passées dans l’ordre.If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

Le namedParameters tableau peut être utilisé pour modifier l’ordre des arguments dans un tableau d’entrée.The namedParameters array can be used to change the order of arguments in an input array. Par exemple, étant donné la M(string a, int b) méthodeM(ByVal a As String, ByVal b As Integer) (dans Visual Basic) et le tableau { 42, "x" }d’entrée, le tableau d’entrée peut être passé sans args modification à si { "b", "a" } le tableau est namedParametersfourni pour.For example, given the method M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) and the input array { 42, "x" }, the input array can be passed unchanged to args if the array { "b", "a" } is supplied for namedParameters.

Les indicateurs BindingFlags de filtre suivants peuvent être utilisés pour définir les membres à inclure dans la recherche :The following BindingFlags filter flags can be used to define which members to include in the search:

  • Spécifiez BindingFlags.Public pour inclure les membres publics dans la recherche.Specify BindingFlags.Public to include public members in the search.

  • Spécifiez BindingFlags.NonPublic pour inclure les membres non publics (c’est-à-dire les membres privés, internes et protégés) dans la recherche.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Spécifiez BindingFlags.FlattenHierarchy pour inclure les membres statiques dans la hiérarchie.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Vous pouvez BindingFlags utiliser les indicateurs de modificateur suivants pour modifier le fonctionnement de la recherche :The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCasepour ignorer la casse de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlypour rechercher uniquement les membres déclarés sur Typele, et non les membres qui ont simplement été hérités.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Les indicateurs BindingFlags d’appel suivants peuvent être utilisés pour indiquer l’action à effectuer avec le membre :The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstancepour appeler un constructeur.CreateInstance to invoke a constructor. nameest ignoré.name is ignored. Non valide avec d’autres indicateurs d’appel.Not valid with other invocation flags.

  • InvokeMethodpour appeler une méthode, mais pas un constructeur ou un initialiseur de type.InvokeMethod to invoke a method, but not a constructor or a type initializer. Non valide avec SetField ou SetProperty.Not valid with SetField or SetProperty. Si InvokeMethod est spécifié par lui- BindingFlags.Publicmême BindingFlags.Instance,, BindingFlags.Static et sont automatiquement inclus.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldpour obtenir la valeur d’un champ.GetField to get the value of a field. Non valide avec SetField.Not valid with SetField.

  • SetFieldpour définir la valeur d’un champ.SetField to set the value of a field. Non valide avec GetField.Not valid with GetField.

  • GetPropertypour obtenir une propriété.GetProperty to get a property. Non valide avec SetProperty.Not valid with SetProperty.

  • SetPropertypour définir une propriété.SetProperty to set a property. Non valide avec GetProperty.Not valid with GetProperty.

Pour plus d'informations, voir System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Une méthode est appelée si les deux conditions suivantes sont vraies :A method will be invoked if both of the following conditions are true:

  • Le nombre de paramètres dans la déclaration de méthode est égal au nombre d’arguments dans args le tableau (sauf si les arguments par défaut sont définis BindingFlags.OptionalParamBinding sur le membre et sont spécifiés).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Le type de chaque argument peut être converti par le Binder en type du paramètre.The type of each argument can be converted by the binder to the type of the parameter.

Le Binder trouvera toutes les méthodes correspondantes.The binder will find all of the matching methods. Ces méthodes sont recherchées en fonction du type de liaisonBindingFlags demandé InvokeMethod( GetPropertyvaleurs,, etc.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). L’ensemble de méthodes est filtré par le nom, le nombre d’arguments et un ensemble de modificateurs de recherche définis dans le Binder.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Une fois la méthode sélectionnée, elle est appelée.After the method is selected, it is invoked. L’accessibilité est vérifiée à ce stade.Accessibility is checked at that point. La recherche peut contrôler l’ensemble de méthodes dans lequel la recherche est effectuée en fonction de l’attribut d’accessibilité associé à la méthode.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. La Binder.BindToMethod méthode de la Binder classe est chargée de sélectionner la méthode à appeler.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Le binder par défaut sélectionne la correspondance la plus spécifique.The default binder selects the most specific match.

InvokeMemberpeut être utilisé pour appeler des méthodes avec des paramètres qui ont des valeurs par défaut.InvokeMember can be used to invoke methods with parameters that have default values. Pour établir une liaison avec ces méthodes, BindingFlags.OptionalParamBinding vous devez spécifier la réflexion.To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. Pour un paramètre qui a une valeur par défaut, vous pouvez fournir une valeur différente ou fournir Missing.Value pour utiliser la valeur par défaut.For a parameter that has a default value, you can either supply a different value, or supply Missing.Value to use the default value.

Par exemple, considérez une méthode telle que MyMethod (int x, float y = 2,0).For example, consider a method such as MyMethod(int x, float y = 2.0). Pour appeler cette méthode avec uniquement le premier argument comme MyMethod (4), transmettez l’un des indicateurs de liaison ci-dessus et transmettez deux arguments, à savoir 4 Missing.Value pour le premier argument et pour le deuxième argument.To invoke this method with only the first argument as MyMethod(4), pass one of the above binding flags and pass two arguments, namely, 4 for the first argument and Missing.Value for the second argument. À moins que Missing.Valuevous n’utilisiez, vous ne pouvez pas Invoke omettre les paramètres facultatifs avec la méthode.Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. Si vous devez le faire, utilisez InvokeMember à la place.If you must do so, use InvokeMember instead.

Les restrictions d’accès sont ignorées pour le code d’un niveau de confiance totale ; autrement dit, les constructeurs, les méthodes, les champs et les propriétés privés sont accessibles et appelés via System.Reflection chaque fois que le code est d’un niveau de confiance suffisant.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

Vous pouvez utiliser Type.InvokeMember pour définir un champ sur une valeur particulière en spécifiant. BindingFlags.SetFieldYou can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Par exemple, si vous souhaitez définir un champ d’instance public nommé F sur la classe C, et que F Stringest un, vous pouvez utiliser le code suivant :For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

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

Si F est un String[], vous pouvez utiliser le code suivant :If F is a String[], you can use code such as:

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

qui initialisera le champ F à ce nouveau tableau.which will initialize the field F to this new array. Vous pouvez également utiliser Type.InvokeMember pour définir une position dans un tableau en fournissant l’index de la valeur, puis la valeur suivante à l’aide d’un code tel que le suivant :You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Cette opération modifie la chaîne « z » dans le tableau que F contient en chaîne « b ».This will change string "z" in the array that F holds to string "b".

Notes

À partir de ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess , cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu l’autorisation avec l’indicateur et si le jeu d’autorisations des membres non publics est limité au jeu d’autorisations de l’appelant, ou à un .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1sous-ensemble parties.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Consultez Considérations sur la sécurité pour la réflexion.)(See Security Considerations for Reflection.)

Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5.NET Framework 3.5 ou version ultérieure.To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour accéder aux membres non publics indépendamment de leur jeu d’autorisations.for accessing non-public members regardless of their grant set. Énumération associée:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
pour appeler du code non managé.to call unmanaged code. Énumération associée:UnmanagedCodeAssociated enumeration: UnmanagedCode

Voir aussi

InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[])

Appelle le membre défini, à l'aide des contraintes de liaison spécifiées et correspondant à la liste d'arguments spécifiée.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj

Paramètres

name
String String String

Chaîne contenant le nom du membre de constructeur, de méthode, de propriété ou de champ à appeler.The string containing the name of the constructor, method, property, or field member to invoke.

- ou --or- Une chaîne vide ("") pour appeler le membre par défaut.An empty string ("") to invoke the default member.

- ou --or- Pour les membres IDispatch, chaîne représentant le DispID, par exemple "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Combinaison de bits de valeurs d’énumération qui spécifie la façon dont est effectuée la recherche.A bitwise combination of the enumeration values that specify how the search is conducted. L'accès peut être fourni par l'un des BindingFlags, par exemple Public, NonPublic, Private, InvokeMethod, GetField, etc.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Il n'est pas nécessaire de spécifier le type de recherche.The type of lookup need not be specified. Si le type de recherche est omis, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static sont utilisés.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder 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.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

- ou --or- Référence null (Nothing en Visual Basic) pour utiliser DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Notez que la définition explicite d'un objet Binder peut être nécessaire pour appeler correctement des surcharges de méthode avec des arguments variables.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Objet sur lequel appeler le membre spécifié.The object on which to invoke the specified member.

args
Object[]

Tableau contenant les arguments à passer au membre à appeler.An array containing the arguments to pass to the member to invoke.

Retours

Objet représentant la valeur de retour du membre appelé.An object representing the return value of the invoked member.

Implémente

Exceptions

invokeAttr ne contient pas CreateInstance et name est null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr n’est pas un attribut BindingFlags valide.invokeAttr is not a valid BindingFlags attribute.

- ou --or- invokeAttr ne contient pas l’un des indicateurs de liaison suivants : InvokeMethod, CreateInstance, GetField, SetField, GetProperty ou SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

ou-or- invokeAttr contient CreateInstance combiné avec InvokeMethod, GetField, SetField, GetProperty ou SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contient à la fois GetField et SetField.invokeAttr contains both GetField and SetField.

- ou --or- invokeAttr contient à la fois GetProperty et SetProperty.invokeAttr contains both GetProperty and SetProperty.

- ou --or- invokeAttr contient InvokeMethod combiné avec SetField ou SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- ou --or- invokeAttr contient SetField et args a plusieurs éléments.invokeAttr contains SetField and args has more than one element.

ou-or- 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.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

- ou --or- L’un des tableaux de paramètres nommés contient une chaîne qui est null.One of the named parameter arrays contains a string that is null.

Le membre spécifié est un initialiseur de classe.The specified member is a class initializer.

Le champ ou la propriété est introuvable.The field or property cannot be found.

Aucune méthode ne peut être trouvée qui correspond aux arguments de args.No method can be found that matches the arguments in args.

- ou --or- L’objet Type actuel représente un type qui contient les paramètres de type ouverts, à savoir, ContainsGenericParameters retourne true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Le membre spécifié ne peut pas être appelé sur target.The specified member cannot be invoked on target.

Plusieurs méthodes correspondent aux critères de liaison.More than one method matches the binding criteria.

Le .NET Compact Framework ne prend pas en charge cette méthode.The .NET Compact Framework does not currently support this method.

La méthode représentée par name a un ou plusieurs paramètres de type générique non spécifiés.The method represented by name has one or more unspecified generic type parameters. Autrement dit, la propriété ContainsGenericParameters de la méthode retourne true.That is, the method's ContainsGenericParameters property returns true.

Exemples

L’exemple suivant utilise InvokeMember pour accéder aux membres d’un type.The following example uses InvokeMember to access members of a type.

using namespace System;
using namespace System::Reflection;

// This sample class has a field, constructor, method, and property.
ref class MyType
{
private:
   Int32 myField;

public:
   MyType( interior_ptr<Int32> x )
   {
       *x *= 5;
   }

   virtual String^ ToString() override
   {
      return myField.ToString();
   }

   property Int32 MyProp 
   {
      Int32 get()
      {
         return myField;
      }

      void set( Int32 value )
      {
         if ( value < 1 )
                  throw gcnew ArgumentOutOfRangeException( "value",value,"value must be > 0" );

         myField = value;
      }
   }
};

int main()
{
   Type^ t = MyType::typeid;

   // Create an instance of a type.
   array<Object^>^args = {8};
   Console::WriteLine( "The value of x before the constructor is called is {0}.", args[ 0 ] );
   Object^ obj = t->InvokeMember( nullptr, static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::CreateInstance), nullptr, nullptr, args );
   Console::WriteLine( "Type: {0}", obj->GetType() );
   Console::WriteLine( "The value of x after the constructor returns is {0}.", args[ 0 ] );

   // Read and write to a field.
   array<Object^>^obj5 = {5};
   t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetField), nullptr, obj, obj5 );
   Int32 v = safe_cast<Int32>(t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetField), nullptr, obj, nullptr ));
   Console::WriteLine( "myField: {0}", v );

   // Call a method.
   String^ s = safe_cast<String^>(t->InvokeMember( "ToString", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::InvokeMethod), nullptr, obj, nullptr ));
   Console::WriteLine( "ToString: {0}", s );

   // Read and write a property. First, attempt to assign an
   // invalid value; then assign a valid value; finally, get
   // the value.
   try
   {
      // Assign the value zero to MyProp. The Property Set 
      // throws an exception, because zero is an invalid value.
      // InvokeMember catches the exception, and throws 
      // TargetInvocationException. To discover the real cause
      // you must catch TargetInvocationException and examine
      // the inner exception. 
      array<Object^>^obj0 = {(int^)0};
      t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj0 );
   }
   catch ( TargetInvocationException^ e ) 
   {
      // If the property assignment failed for some unexpected
      // reason, rethrow the TargetInvocationException.
      if ( e->InnerException->GetType() != ArgumentOutOfRangeException::typeid )
            throw;

      Console::WriteLine( "An invalid value was assigned to MyProp." );
   }

   array<Object^>^obj2 = {2};
   t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj2 );
   v =  safe_cast<Int32>(t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetProperty), nullptr, obj, nullptr ));
   Console::WriteLine( "MyProp: {0}", v );
}
using System;
using System.Reflection;

// This sample class has a field, constructor, method, and property.
class MyType 
{
    Int32 myField;
    public MyType(ref Int32 x) {x *= 5;}
    public override String ToString() {return myField.ToString();}
    public Int32 MyProp 
    {
        get {return myField;}
        set 
        { 
            if (value < 1) 
                throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
            myField = value;
        }
    }
}

class MyApp 
{
    static void Main() 
    {
        Type t = typeof(MyType);
        // Create an instance of a type.
        Object[] args = new Object[] {8};
        Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
        Object obj = t.InvokeMember(null, 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
        Console.WriteLine("Type: " + obj.GetType().ToString());
        Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);

        // Read and write to a field.
        t.InvokeMember("myField", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
        Int32 v = (Int32) t.InvokeMember("myField", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
        Console.WriteLine("myField: " + v);

        // Call a method.
        String s = (String) t.InvokeMember("ToString", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
        Console.WriteLine("ToString: " + s);

        // Read and write a property. First, attempt to assign an
        // invalid value; then assign a valid value; finally, get
        // the value.
        try 
        {
            // Assign the value zero to MyProp. The Property Set 
            // throws an exception, because zero is an invalid value.
            // InvokeMember catches the exception, and throws 
            // TargetInvocationException. To discover the real cause
            // you must catch TargetInvocationException and examine
            // the inner exception. 
            t.InvokeMember("MyProp", 
                BindingFlags.DeclaredOnly | 
                BindingFlags.Public | BindingFlags.NonPublic | 
                BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
        } 
        catch (TargetInvocationException e) 
        {
            // If the property assignment failed for some unexpected
            // reason, rethrow the TargetInvocationException.
            if (e.InnerException.GetType() != 
                typeof(ArgumentOutOfRangeException)) 
                throw;
            Console.WriteLine("An invalid value was assigned to MyProp.");
        }
        t.InvokeMember("MyProp", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
        v = (Int32) t.InvokeMember("MyProp", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
        Console.WriteLine("MyProp: " + v);
    }
}
Imports System.Reflection

' This sample class has a field, constructor, method, and property.
Class MyType
    Private myField As Int32

    Public Sub New(ByRef x As Int32)
        x *= 5
    End Sub

    Public Overrides Function ToString() As [String]
        Return myField.ToString()
    End Function 'ToString

    Public Property MyProp() As Int32
        Get
            Return myField
        End Get
        Set(ByVal Value As Int32)
            If Value < 1 Then
                Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
            End If
            myField = Value
        End Set
    End Property
End Class 'MyType

Class MyApp

    Shared Sub Main()
        Dim t As Type = GetType(MyType)
        ' Create an instance of a type.
        Dim args() As [Object] = {8}
        Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
        Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
        Console.WriteLine("Type: {0}", obj.GetType().ToString())
        Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))

        ' Read and write to a field.
        t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
        Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
        Console.WriteLine("myField: {0}", v)

        ' Call a method.
        Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
        Console.WriteLine("ToString: {0}", s)

        ' Read and write a property. First, attempt to assign an
        ' invalid value; then assign a valid value; finally, get
        ' the value.
        Try
            ' Assign the value zero to MyProp. The Property Set 
            ' throws an exception, because zero is an invalid value.
            ' InvokeMember catches the exception, and throws 
            ' TargetInvocationException. To discover the real cause
            ' you must catch TargetInvocationException and examine
            ' the inner exception. 
            t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
        Catch e As TargetInvocationException
            ' If the property assignment failed for some unexpected
            ' reason, rethrow the TargetInvocationException.
            If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
                Throw
            End If
            Console.WriteLine("An invalid value was assigned to MyProp.")
        End Try
        t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
        v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
        Console.WriteLine("MyProp: {0}", v)
    End Sub
End Class 'MyApp

Remarques

Notes

Vous ne pouvez InvokeMember pas utiliser pour appeler une méthode générique.You cannot use InvokeMember to invoke a generic method.

Les indicateurs BindingFlags de filtre suivants peuvent être utilisés pour définir les membres à inclure dans la recherche :The following BindingFlags filter flags can be used to define which members to include in the search:

  • Spécifiez BindingFlags.Public pour inclure les membres publics dans la recherche.Specify BindingFlags.Public to include public members in the search.

  • Spécifiez BindingFlags.NonPublic pour inclure les membres non publics (c’est-à-dire les membres privés et protégés) dans la recherche.Specify BindingFlags.NonPublic to include non-public members (that is, private and protected members) in the search.

  • Spécifiez BindingFlags.FlattenHierarchy pour inclure les membres statiques dans la hiérarchie.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Vous pouvez BindingFlags utiliser les indicateurs de modificateur suivants pour modifier le fonctionnement de la recherche :The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCasepour ignorer la casse de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlypour rechercher uniquement les membres déclarés sur Typele, et non les membres qui ont simplement été hérités.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Les indicateurs BindingFlags d’appel suivants peuvent être utilisés pour indiquer l’action à effectuer avec le membre :The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstancepour appeler un constructeur.CreateInstance to invoke a constructor. nameest ignoré.name is ignored. Non valide avec d’autres indicateurs d’appel.Not valid with other invocation flags.

  • InvokeMethodpour appeler une méthode, mais pas un constructeur ou un initialiseur de type.InvokeMethod to invoke a method, but not a constructor or a type initializer. Non valide avec SetField ou SetProperty.Not valid with SetField or SetProperty. Si InvokeMethod est spécifié par lui- BindingFlags.Publicmême BindingFlags.Instance,, BindingFlags.Static et sont automatiquement inclus.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldpour obtenir la valeur d’un champ.GetField to get the value of a field. Non valide avec SetField.Not valid with SetField.

  • SetFieldpour définir la valeur d’un champ.SetField to set the value of a field. Non valide avec GetField.Not valid with GetField.

  • GetPropertypour obtenir une propriété.GetProperty to get a property. Non valide avec SetProperty.Not valid with SetProperty.

  • SetPropertypour définir une propriété.SetProperty to set a property. Non valide avec GetProperty.Not valid with GetProperty.

Pour plus d'informations, voir System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Une méthode est appelée si les deux conditions suivantes sont vraies :A method will be invoked if both of the following conditions are true:

  • Le nombre de paramètres dans la déclaration de méthode est égal au nombre d’arguments dans args le tableau (sauf si les arguments par défaut sont définis BindingFlags.OptionalParamBinding sur le membre et sont spécifiés).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Le type de chaque argument peut être converti par le Binder en type du paramètre.The type of each argument can be converted by the binder to the type of the parameter.

Le Binder trouvera toutes les méthodes correspondantes.The binder will find all of the matching methods. Ces méthodes sont recherchées en fonction du type de liaisonBindingFlags demandé InvokeMethod( GetPropertyvaleurs,, etc.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). L’ensemble de méthodes est filtré par le nom, le nombre d’arguments et un ensemble de modificateurs de recherche définis dans le Binder.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Une fois la méthode sélectionnée, elle est appelée.After the method is selected, it is invoked. L’accessibilité est vérifiée à ce stade.Accessibility is checked at that point. La recherche peut contrôler l’ensemble de méthodes dans lequel la recherche est effectuée en fonction de l’attribut d’accessibilité associé à la méthode.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. La Binder.BindToMethod méthode de la Binder classe est chargée de sélectionner la méthode à appeler.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Le binder par défaut sélectionne la correspondance la plus spécifique.The default binder selects the most specific match.

Les restrictions d’accès sont ignorées pour le code d’un niveau de confiance totale ; autrement dit, les constructeurs, les méthodes, les champs et les propriétés privés sont accessibles et appelés via System.Reflection chaque fois que le code est d’un niveau de confiance suffisant.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

Vous pouvez utiliser Type.InvokeMember pour définir un champ sur une valeur particulière en spécifiant. BindingFlags.SetFieldYou can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Par exemple, si vous souhaitez définir un champ d’instance public nommé F sur la classe C, et que F Stringest un, vous pouvez utiliser le code suivant :For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

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

Si F est un String[], vous pouvez utiliser le code suivant :If F is a String[], you can use code such as:

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

qui initialisera le champ F à ce nouveau tableau.which will initialize the field F to this new array. Vous pouvez également utiliser Type.InvokeMember pour définir une position dans un tableau en fournissant l’index de la valeur, puis la valeur suivante à l’aide d’un code tel que le suivant :You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Cette opération modifie la chaîne « z » dans le tableau que F contient en chaîne « b ».This will change string "z" in the array that F holds to string "b".

Quand vous appelez un IDispatch membre, vous pouvez spécifier le DispId à la place du nom de membre à l’aide du format de chaîne "[DISPID = # #]".When you invoke an IDispatch member, you can specify the DispID instead of the member name, using the string format "[DispID=##]". Par exemple, si le DispID de MyComMethod est 3, vous pouvez spécifier la chaîne « [DispID = 3] » au lieu de « MyComMethod ».For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". L’appel d’un membre par DispID est plus rapide que la recherche du membre par nom.Invoking a member by DispID is faster than looking up the member by name. Dans les scénarios d’agrégation complexes, le DispID est parfois le seul moyen d’appeler le membre souhaité.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Notes

À partir de ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess , cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu l’autorisation avec l’indicateur et si le jeu d’autorisations des membres non publics est limité au jeu d’autorisations de l’appelant, ou à un .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1sous-ensemble parties.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Consultez Considérations sur la sécurité pour la réflexion.)(See Security Considerations for Reflection.)

Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5.NET Framework 3.5 ou version ultérieure.To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour accéder aux membres non publics indépendamment de leur jeu d’autorisations.for accessing non-public members regardless of their grant set. Énumération associée:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
pour appeler du code non managé.to call unmanaged code. Énumération associée:UnmanagedCodeAssociated enumeration: UnmanagedCode

Voir aussi

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Appelle le membre spécifié, à l'aide des contraintes de liaison spécifiées et correspondant à la liste d'arguments et à la culture spécifiées.Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj

Paramètres

name
String String String

Chaîne contenant le nom du membre de constructeur, de méthode, de propriété ou de champ à appeler.The string containing the name of the constructor, method, property, or field member to invoke.

ou-or- Une chaîne vide ("") pour appeler le membre par défaut.An empty string ("") to invoke the default member.

ou-or- Pour les membres IDispatch, chaîne représentant le DispID, par exemple "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Combinaison de bits de valeurs d’énumération qui spécifie la façon dont est effectuée la recherche.A bitwise combination of the enumeration values that specify how the search is conducted. L'accès peut être fourni par l'un des BindingFlags, par exemple Public, NonPublic, Private, InvokeMethod, GetField, etc.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Il n'est pas nécessaire de spécifier le type de recherche.The type of lookup need not be specified. Si le type de recherche est omis, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static sont utilisés.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder 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.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

- ou --or- Référence null (Nothing en Visual Basic) pour utiliser DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Notez que la définition explicite d'un objet Binder peut être nécessaire pour appeler correctement des surcharges de méthode avec des arguments variables.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Objet sur lequel appeler le membre spécifié.The object on which to invoke the specified member.

args
Object[]

Tableau contenant les arguments à passer au membre à appeler.An array containing the arguments to pass to the member to invoke.

culture
CultureInfo CultureInfo CultureInfo

Objet représentant le paramètre régional de globalisation à utiliser si nécessaire, notamment pour les conversions spécifiques aux paramètres régionaux telles que la conversion d'un type numérique String en type Double.The object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

- ou --or- Référence null (Nothing en Visual Basic) pour utiliser le CultureInfo du thread actuel.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

Retours

Objet représentant la valeur de retour du membre appelé.An object representing the return value of the invoked member.

Implémente

Exceptions

invokeAttr ne contient pas CreateInstance et name est null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr n’est pas un attribut BindingFlags valide.invokeAttr is not a valid BindingFlags attribute.

- ou --or- invokeAttr ne contient pas l’un des indicateurs de liaison suivants : InvokeMethod, CreateInstance, GetField, SetField, GetProperty ou SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contient CreateInstance combiné avec InvokeMethod, GetField, SetField, GetProperty ou SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- ou --or- invokeAttr contient à la fois GetField et SetField.invokeAttr contains both GetField and SetField.

- ou --or- invokeAttr contient à la fois GetProperty et SetProperty.invokeAttr contains both GetProperty and SetProperty.

- ou --or- invokeAttr contient InvokeMethod combiné avec SetField ou SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- ou --or- invokeAttr contient SetField et args a plusieurs éléments.invokeAttr contains SetField and args has more than one element.

- ou --or- 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.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

ou-or- L’un des tableaux de paramètres nommés contient une chaîne qui est null.One of the named parameter arrays contains a string that is null.

Le membre spécifié est un initialiseur de classe.The specified member is a class initializer.

Le champ ou la propriété est introuvable.The field or property cannot be found.

Aucune méthode ne peut être trouvée qui correspond aux arguments de args.No method can be found that matches the arguments in args.

ou-or- L’objet Type actuel représente un type qui contient les paramètres de type ouverts, à savoir, ContainsGenericParameters retourne true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Le membre spécifié ne peut pas être appelé sur target.The specified member cannot be invoked on target.

Plusieurs méthodes correspondent aux critères de liaison.More than one method matches the binding criteria.

La méthode représentée par name a un ou plusieurs paramètres de type générique non spécifiés.The method represented by name has one or more unspecified generic type parameters. Autrement dit, la propriété ContainsGenericParameters de la méthode retourne true.That is, the method's ContainsGenericParameters property returns true.

Remarques

Bien que le binder par défaut ne traite CultureInfo pas ( culture le paramètre), vous pouvez utiliser la System.Reflection.Binder classe abstraite pour écrire un Binder personnalisé qui effectue culturele traitement.Although the default binder does not process CultureInfo (the culture parameter), you can use the abstract System.Reflection.Binder class to write a custom binder that does process culture.

Notes

Vous ne pouvez InvokeMember pas utiliser pour appeler une méthode générique.You cannot use InvokeMember to invoke a generic method.

Les indicateurs BindingFlags de filtre suivants peuvent être utilisés pour définir les membres à inclure dans la recherche :The following BindingFlags filter flags can be used to define which members to include in the search:

  • Spécifiez BindingFlags.Public pour inclure les membres publics dans la recherche.Specify BindingFlags.Public to include public members in the search.

  • Spécifiez BindingFlags.NonPublic pour inclure les membres non publics (c’est-à-dire les membres privés, internes et protégés) dans la recherche.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Spécifiez BindingFlags.FlattenHierarchy pour inclure les membres statiques dans la hiérarchie.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Vous pouvez BindingFlags utiliser les indicateurs de modificateur suivants pour modifier le fonctionnement de la recherche :The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCasepour ignorer la casse de name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlypour rechercher uniquement les membres déclarés sur Typele, et non les membres qui ont simplement été hérités.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Les indicateurs BindingFlags d’appel suivants peuvent être utilisés pour indiquer l’action à effectuer avec le membre :The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstancepour appeler un constructeur.CreateInstance to invoke a constructor. nameest ignoré.name is ignored. Non valide avec d’autres indicateurs d’appel.Not valid with other invocation flags.

  • InvokeMethodpour appeler une méthode, mais pas un constructeur ou un initialiseur de type.InvokeMethod to invoke a method, but not a constructor or a type initializer. Non valide avec SetField ou SetProperty.Not valid with SetField or SetProperty. Si InvokeMethod est spécifié par lui- BindingFlags.Publicmême BindingFlags.Instance,, BindingFlags.Static et sont automatiquement inclus.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldpour obtenir la valeur d’un champ.GetField to get the value of a field. Non valide avec SetField.Not valid with SetField.

  • SetFieldpour définir la valeur d’un champ.SetField to set the value of a field. Non valide avec GetField.Not valid with GetField.

  • GetPropertypour obtenir une propriété.GetProperty to get a property. Non valide avec SetProperty.Not valid with SetProperty.

  • SetPropertypour définir une propriété.SetProperty to set a property. Non valide avec GetProperty.Not valid with GetProperty.

Pour plus d'informations, voir System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Une méthode est appelée si les deux conditions suivantes sont vraies :A method will be invoked if both of the following conditions are true:

  • Le nombre de paramètres dans la déclaration de méthode est égal au nombre d’arguments dans args le tableau (sauf si les arguments par défaut sont définis BindingFlags.OptionalParamBinding sur le membre et sont spécifiés).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Le type de chaque argument peut être converti par le Binder en type du paramètre.The type of each argument can be converted by the binder to the type of the parameter.

Le Binder trouvera toutes les méthodes correspondantes.The binder will find all of the matching methods. Ces méthodes sont recherchées en fonction du type de liaisonBindingFlags demandé InvokeMethod( GetPropertyvaleurs,, etc.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). L’ensemble de méthodes est filtré par le nom, le nombre d’arguments et un ensemble de modificateurs de recherche définis dans le Binder.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Une fois la méthode sélectionnée, elle est appelée.After the method is selected, it is invoked. L’accessibilité est vérifiée à ce stade.Accessibility is checked at that point. La recherche peut contrôler l’ensemble de méthodes dans lequel la recherche est effectuée en fonction de l’attribut d’accessibilité associé à la méthode.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. La Binder.BindToMethod méthode de la Binder classe est chargée de sélectionner la méthode à appeler.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Le binder par défaut sélectionne la correspondance la plus spécifique.The default binder selects the most specific match.

Les restrictions d’accès sont ignorées pour le code d’un niveau de confiance totale ; autrement dit, les constructeurs, les méthodes, les champs et les propriétés privés sont accessibles et appelés via la réflexion chaque fois que le code est d’un niveau de confiance suffisant.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through Reflection whenever the code is fully trusted.

Vous pouvez utiliser Type.InvokeMember pour définir un champ sur une valeur particulière en spécifiant. BindingFlags.SetFieldYou can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Par exemple, si vous souhaitez définir un champ d’instance public nommé F sur la classe C, et que F String est un, vous pouvez utiliser le code suivant :For example, if you want to set a public instance field named F on class C, and F is a String you can use code such as:

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

Si F est un String[], vous pouvez utiliser le code suivant :If F is a String[], you can use code such as:

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

qui initialisera le champ F à ce nouveau tableau.which will initialize the field F to this new array. Vous pouvez également utiliser Type.InvokeMember pour définir une position dans un tableau en fournissant l’index de la valeur, puis la valeur suivante à l’aide d’un code tel que le suivant :You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Cette opération modifie la chaîne « z » dans le tableau que F contient en chaîne « b ».This will change string "z" in the array that F holds to string "b".

Quand vous appelez un IDispatch membre, vous pouvez spécifier le DispId à la place du nom de membre à l’aide du format de chaîne "[DISPID = # #]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Par exemple, si le DispID de MyComMethod est 3, vous pouvez spécifier la chaîne « [DispID = 3] » au lieu de « MyComMethod ».For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". L’appel d’un membre par DispID est plus rapide que la recherche du membre par nom.Invoking a member by DispID is faster than looking up the member by name. Dans les scénarios d’agrégation complexes, le DispID est parfois le seul moyen d’appeler le membre souhaité.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Notes

À partir de ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess , cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu l’autorisation avec l’indicateur et si le jeu d’autorisations des membres non publics est limité au jeu d’autorisations de l’appelant, ou à un .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1sous-ensemble parties.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Consultez Considérations sur la sécurité pour la réflexion.)(See Security Considerations for Reflection.)

Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5.NET Framework 3.5 ou version ultérieure.To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour accéder aux membres non publics indépendamment de leur jeu d’autorisations.for accessing non-public members regardless of their grant set. Énumération associée:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
pour appeler du code non managé.to call unmanaged code. Énumération associée:UnmanagedCodeAssociated enumeration: UnmanagedCode

Voir aussi

S’applique à