Type.InvokeMember Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Appelle un membre spécifique de l’élément actif Type.
Surcharges
| Nom | Description |
|---|---|
| InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) |
En cas de substitution dans une classe dérivée, appelle le membre spécifié, en utilisant les contraintes de liaison spécifiées et en faisant correspondre la liste d’arguments, les modificateurs et la culture spécifiés. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) |
Appelle le membre spécifié, en utilisant les contraintes de liaison spécifiées et en correspondant à la liste et à la culture d’arguments spécifiées. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[]) |
Appelle le membre spécifié, en utilisant les contraintes de liaison spécifiées et en correspondant à la liste d’arguments spécifiée. |
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
En cas de substitution dans une classe dérivée, appelle le membre spécifié, en utilisant les contraintes de liaison spécifiées et en faisant correspondre la liste d’arguments, les modificateurs et la culture spécifiés.
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
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);
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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public MustOverride Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object
Paramètres
- name
- String
Chaîne contenant le nom du constructeur, de la méthode, de la propriété ou du membre de champ à appeler.
- ou -
Chaîne vide ( » « ) pour appeler le membre par défaut.
- ou -
Pour IDispatch les membres, une chaîne représentant le DispID, par exemple « [DispID=3] ».
- invokeAttr
- BindingFlags
Combinaison de bits des valeurs d’énumération qui spécifient la façon dont la recherche est effectuée. L’accès peut être l’un des BindingFlags tels que Public, , PrivateNonPublic, InvokeMethod, , GetFieldetc. Le type de recherche n’a pas besoin d’être spécifié. Si le type de recherche est omis, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static sont utilisés.
- binder
- Binder
Objet qui définit un ensemble de propriétés et active la liaison, qui peut impliquer la sélection d’une méthode surchargée, la contrainte des types d’arguments et l’appel d’un membre via la réflexion.
- ou -
Référence Null (Nothing in Visual Basic), pour utiliser le DefaultBinder. Notez que la définition explicite d’un Binder objet peut être nécessaire pour appeler correctement des surcharges de méthode avec des arguments de variable.
- target
- Object
Objet sur lequel appeler le membre spécifié.
- args
- Object[]
Tableau contenant les arguments à passer au membre à appeler.
- modifiers
- ParameterModifier[]
Tableau d’objets ParameterModifier représentant les attributs associés à l’élément correspondant dans le args tableau. Les attributs associés d’un paramètre sont stockés dans la signature du membre.
Le classeur par défaut traite ce paramètre uniquement lors de l’appel d’un composant COM.
- culture
- CultureInfo
Objet CultureInfo représentant les paramètres régionaux de globalisation à utiliser, qui peuvent être nécessaires pour les conversions spécifiques aux paramètres régionaux, telles que la conversion d’une chaîne numérique en double.
- ou -
Référence Null (Nothing dans Visual Basic) pour utiliser le CultureInfo du thread actuel.
- namedParameters
- String[]
Tableau contenant les noms des paramètres auxquels les valeurs du args tableau sont passées.
Retours
Objet représentant la valeur de retour du membre appelé.
Implémente
- Attributs
Exceptions
invokeAttr ne contient CreateInstance pas et name n’est nullpas .
args et modifiers n’ont pas la même longueur.
- ou -
invokeAttr n’est pas un attribut valide BindingFlags .
- ou -
invokeAttrne contient pas l’un des indicateurs de liaison suivants : InvokeMethod, , CreateInstanceGetField, SetField, , GetPropertyou SetProperty.
- ou -
invokeAttrcontient CreateInstance combiné avec InvokeMethod, , GetField, SetFieldGetProperty, 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 possède plusieurs éléments.
- ou -
Le tableau de paramètres nommé est supérieur au tableau d’arguments.
- ou -
Cette méthode est appelée sur un objet COM et l’un des indicateurs de liaison suivants n’a pas été transmis : BindingFlags.InvokeMethod, , BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyou BindingFlags.PutRefDispProperty.
- ou -
L’un des tableaux de paramètres nommés contient une chaîne qui est null.
Le membre spécifié est un initialiseur de classe.
Impossible de trouver le champ ou la propriété.
Aucune méthode n’est trouvée qui correspond aux arguments dans args.
- ou -
Aucun membre n’est trouvé avec les noms d’arguments fournis dans namedParameters.
- ou -
L’objet actuel Type représente un type qui contient des paramètres de type ouvert, autrement dit, ContainsGenericParameters retourne true.
Impossible d’appeler le membre spécifié sur target.
Plusieurs méthodes correspondent aux critères de liaison.
La méthode représentée par name un ou plusieurs paramètres de type générique non spécifiés. Autrement dit, la propriété de ContainsGenericParameters la méthode retourne true.
Remarques
InvokeMember appelle 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.
Note
Vous ne pouvez pas utiliser InvokeMember pour appeler une méthode générique.
Lorsque vous appelez un IDispatch membre, vous pouvez spécifier le DispID au lieu du nom du 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] » au lieu de « MyComMethod ». L’appel d’un membre par DispID est plus rapide que de rechercher le membre par nom. Dans les scénarios d’agrégation complexes, le DispID est parfois le seul moyen d’appeler le membre souhaité.
Bien que le classeur par défaut ne traite ParameterModifier pas ou CultureInfo (les modifiers paramètres culture ), vous pouvez utiliser la classe abstraite System.Reflection.Binder pour écrire un classeur personnalisé qui effectue le processus modifiers et culture.
ParameterModifier est utilisé uniquement lors de l’appel via l’interopérabilité COM, et seuls les paramètres passés par référence sont gérés.
Chaque paramètre du namedParameters tableau obtient la valeur de l’élément correspondant dans le args tableau. Si la longueur args est supérieure à la longueur de namedParameters, les valeurs d’argument restantes sont passées dans l’ordre.
Le namedParameters tableau peut être utilisé pour modifier l’ordre des arguments dans un tableau d’entrée. Par exemple, étant donné la méthode M(string a, int b) (M(ByVal a As String, ByVal b As Integer) dans Visual Basic) et le tableau d’entrée { 42, "x" }, le tableau d’entrée peut être passé inchangé à args si le tableau { "b", "a" } est fourni pour namedParameters.
Les indicateurs de filtre suivants BindingFlags peuvent être utilisés pour définir les membres à inclure dans la recherche :
Spécifiez
BindingFlags.Publicd’inclure des membres publics dans la recherche.Spécifiez
BindingFlags.NonPublicd’inclure des membres non publics (c’est-à-dire des membres privés, internes et protégés) dans la recherche.Spécifiez
BindingFlags.FlattenHierarchyd’inclure des membres statiques dans la hiérarchie.
Les indicateurs de modification suivants BindingFlags peuvent être utilisés pour modifier le fonctionnement de la recherche :
BindingFlags.IgnoreCasepour ignorer le cas dename.BindingFlags.DeclaredOnlypour rechercher uniquement les membres déclarés sur le Type, et non les membres qui étaient simplement hérités.
Les indicateurs d’appel suivants BindingFlags peuvent être utilisés pour indiquer quelle action effectuer avec le membre :
CreateInstancepour appeler un constructeur.nameest ignoré. Non valide avec d’autres indicateurs d’appel.InvokeMethodpour appeler une méthode, mais pas un constructeur ou un initialiseur de type. Non valide avecSetFieldouSetProperty. SiInvokeMethodelle est spécifiée par elle-même,BindingFlags.PublicetBindingFlags.StaticBindingFlags.Instanceest automatiquement incluse.GetFieldpour obtenir la valeur d’un champ. Non valide avecSetField.SetFieldpour définir la valeur d’un champ. Non valide avecGetField.GetPropertypour obtenir une propriété. Non valide avecSetProperty.SetPropertypour définir une propriété. Non valide avecGetProperty.
Pour plus d’informations, consultez System.Reflection.BindingFlags.
Une méthode est appelée si les deux conditions suivantes sont remplies :
Le nombre de paramètres dans la déclaration de méthode est égal au nombre d’arguments du
argstableau (sauf si les arguments par défaut sont définis sur le membre etBindingFlags.OptionalParamBindingspécifiés).Le type de chaque argument peut être converti par le classeur en type du paramètre.
Le classeur trouvera toutes les méthodes correspondantes. Ces méthodes sont trouvées en fonction du type de liaison demandée (BindingFlags valeurs InvokeMethod, GetPropertyetc.). 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 classeur.
Une fois la méthode sélectionnée, elle est appelée. L’accessibilité est vérifiée à ce stade. La recherche peut contrôler quel ensemble de méthodes sont recherchés en fonction de l’attribut d’accessibilité associé à la méthode. La Binder.BindToMethod méthode de la Binder classe est chargée de sélectionner la méthode à appeler. Le classeur par défaut sélectionne la correspondance la plus spécifique.
InvokeMember peut être utilisé pour appeler des méthodes avec des paramètres qui ont des valeurs par défaut. Pour établir une liaison à ces méthodes, Reflection doit BindingFlags.OptionalParamBinding être spécifié. 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.
Par exemple, considérez une méthode telle que MyMethod(int x, float y = 2,0). Pour appeler cette méthode avec uniquement le premier argument comme MyMethod(4), passez l’un des indicateurs de liaison ci-dessus et passez deux arguments, à savoir, 4 pour le premier argument et Missing.Value pour le deuxième argument. Sauf si vous utilisez Missing.Value, vous ne pouvez pas omettre les paramètres facultatifs avec la Invoke méthode. Si vous devez le faire, utilisez InvokeMember plutôt.
Les restrictions d’accès sont ignorées pour le code entièrement approuvé ; autrement dit, des constructeurs privés, des méthodes, des champs et des propriétés sont accessibles et appelés chaque System.Reflection fois que le code est entièrement approuvé.
Vous pouvez utiliser Type.InvokeMember pour définir un champ sur une valeur particulière en spécifiant BindingFlags.SetField. Par exemple, si vous souhaitez définir un champ d’instance publique nommé F sur la classe C et F est un String, vous pouvez utiliser du code tel que :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);
Si F est un String[], vous pouvez utiliser du code tel que :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);
qui initialise le champ F à ce nouveau tableau. 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 du code tel que le suivant :
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 qui contient la valeur « b ».
Note
Cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu ReflectionPermission l’indicateur ReflectionPermissionFlag.RestrictedMemberAccess et si l’ensemble d’octroi des membres non publics est limité au jeu d’octrois de l’appelant ou à un sous-ensemble de celui-ci. (Consultez considérations relatives à la sécurité pour la réflexion.)
Pour utiliser cette fonctionnalité, votre application doit cibler le .NET Framework 3.5 ou version ultérieure.
Voir aussi
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
S’applique à
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
Appelle le membre spécifié, en utilisant les contraintes de liaison spécifiées et en correspondant à la liste et à la culture d’arguments spécifiées.
public:
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:
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, 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);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
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
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object
Paramètres
- name
- String
Chaîne contenant le nom du constructeur, de la méthode, de la propriété ou du membre de champ à appeler.
- ou -
Chaîne vide ( » « ) pour appeler le membre par défaut.
- ou -
Pour IDispatch les membres, une chaîne représentant le DispID, par exemple « [DispID=3] ».
- invokeAttr
- BindingFlags
Combinaison de bits des valeurs d’énumération qui spécifient la façon dont la recherche est effectuée. L’accès peut être l’un des BindingFlags tels que Public, , PrivateNonPublic, InvokeMethod, , GetFieldetc. Le type de recherche n’a pas besoin d’être spécifié. Si le type de recherche est omis, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static sont utilisés.
- binder
- Binder
Objet qui définit un ensemble de propriétés et active la liaison, qui peut impliquer la sélection d’une méthode surchargée, la contrainte des types d’arguments et l’appel d’un membre via la réflexion.
- ou -
Référence Null (Nothing dans Visual Basic), pour utiliser le DefaultBinder. Notez que la définition explicite d’un Binder objet peut être nécessaire pour appeler correctement des surcharges de méthode avec des arguments de variable.
- target
- Object
Objet sur lequel appeler le membre spécifié.
- args
- Object[]
Tableau contenant les arguments à passer au membre à appeler.
- culture
- CultureInfo
Objet représentant les paramètres régionaux de globalisation à utiliser, qui peuvent être nécessaires pour les conversions spécifiques aux paramètres régionaux, telles que la conversion d’un numérique String en un Double.
- ou -
Référence Null (Nothing dans Visual Basic) pour utiliser le CultureInfo du thread actuel.
Retours
Objet représentant la valeur de retour du membre appelé.
Implémente
- Attributs
Exceptions
invokeAttr ne contient CreateInstance pas et name n’est nullpas .
invokeAttr n’est pas un attribut valide BindingFlags .
- ou -
invokeAttrne contient pas l’un des indicateurs de liaison suivants : InvokeMethod, , CreateInstanceGetField, SetField, , GetPropertyou SetProperty.
- ou -
invokeAttrcontient CreateInstance combiné avec InvokeMethod, , GetField, SetFieldGetProperty, 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 possède plusieurs éléments.
- ou -
Cette méthode est appelée sur un objet COM et l’un des indicateurs de liaison suivants n’a pas été transmis : BindingFlags.InvokeMethod, , BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyou BindingFlags.PutRefDispProperty.
- ou -
L’un des tableaux de paramètres nommés contient une chaîne qui est null.
Le membre spécifié est un initialiseur de classe.
Impossible de trouver le champ ou la propriété.
Aucune méthode n’est trouvée qui correspond aux arguments dans args.
- ou -
L’objet actuel Type représente un type qui contient des paramètres de type ouvert, autrement dit, ContainsGenericParameters retourne true.
Impossible d’appeler le membre spécifié sur target.
Plusieurs méthodes correspondent aux critères de liaison.
La méthode représentée par name un ou plusieurs paramètres de type générique non spécifiés. Autrement dit, la propriété de ContainsGenericParameters la méthode retourne true.
Remarques
Bien que le classeur par défaut ne traite CultureInfo pas (le culture paramètre), vous pouvez utiliser la classe abstraite System.Reflection.Binder pour écrire un classeur personnalisé qui traite culture.
Note
Vous ne pouvez pas utiliser InvokeMember pour appeler une méthode générique.
Les indicateurs de filtre suivants BindingFlags peuvent être utilisés pour définir les membres à inclure dans la recherche :
Spécifiez
BindingFlags.Publicd’inclure des membres publics dans la recherche.Spécifiez
BindingFlags.NonPublicd’inclure des membres non publics (c’est-à-dire des membres privés, internes et protégés) dans la recherche.Spécifiez
BindingFlags.FlattenHierarchyd’inclure des membres statiques dans la hiérarchie.
Les indicateurs de modification suivants BindingFlags peuvent être utilisés pour modifier le fonctionnement de la recherche :
BindingFlags.IgnoreCasepour ignorer le cas dename.BindingFlags.DeclaredOnlypour rechercher uniquement les membres déclarés sur le Type, et non les membres qui étaient simplement hérités.
Les indicateurs d’appel suivants BindingFlags peuvent être utilisés pour indiquer quelle action effectuer avec le membre :
CreateInstancepour appeler un constructeur.nameest ignoré. Non valide avec d’autres indicateurs d’appel.InvokeMethodpour appeler une méthode, mais pas un constructeur ou un initialiseur de type. Non valide avecSetFieldouSetProperty. SiInvokeMethodelle est spécifiée par elle-même,BindingFlags.PublicetBindingFlags.StaticBindingFlags.Instanceest automatiquement incluse.GetFieldpour obtenir la valeur d’un champ. Non valide avecSetField.SetFieldpour définir la valeur d’un champ. Non valide avecGetField.GetPropertypour obtenir une propriété. Non valide avecSetProperty.SetPropertypour définir une propriété. Non valide avecGetProperty.
Pour plus d’informations, consultez System.Reflection.BindingFlags.
Une méthode est appelée si les deux conditions suivantes sont remplies :
Le nombre de paramètres dans la déclaration de méthode est égal au nombre d’arguments du
argstableau (sauf si les arguments par défaut sont définis sur le membre etBindingFlags.OptionalParamBindingspécifiés).Le type de chaque argument peut être converti par le classeur en type du paramètre.
Le classeur trouvera toutes les méthodes correspondantes. Ces méthodes sont trouvées en fonction du type de liaison demandée (BindingFlags valeurs InvokeMethod, GetPropertyetc.). 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 classeur.
Une fois la méthode sélectionnée, elle est appelée. L’accessibilité est vérifiée à ce stade. La recherche peut contrôler quel ensemble de méthodes sont recherchés en fonction de l’attribut d’accessibilité associé à la méthode. La Binder.BindToMethod méthode de la Binder classe est chargée de sélectionner la méthode à appeler. Le classeur par défaut sélectionne la correspondance la plus spécifique.
Les restrictions d’accès sont ignorées pour le code entièrement approuvé ; autrement dit, des constructeurs privés, des méthodes, des champs et des propriétés sont accessibles et appelés par le biais de Reflection chaque fois que le code est entièrement approuvé.
Vous pouvez utiliser Type.InvokeMember pour définir un champ sur une valeur particulière en spécifiant BindingFlags.SetField. Par exemple, si vous souhaitez définir un champ d’instance publique nommé F sur la classe C, et F est un String code que vous pouvez utiliser comme suit :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);
Si F est un String[], vous pouvez utiliser du code tel que :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);
qui initialise le champ F à ce nouveau tableau. 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 du code tel que le suivant :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);
Cette opération modifie la chaîne « z » dans le tableau qui contient la valeur « b ».
Lorsque vous appelez un IDispatch membre, vous pouvez spécifier le DispID au lieu du nom du 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] » au lieu de « MyComMethod ». L’appel d’un membre par DispID est plus rapide que de rechercher le membre par nom. Dans les scénarios d’agrégation complexes, le DispID est parfois le seul moyen d’appeler le membre souhaité.
Note
Cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu ReflectionPermission l’indicateur ReflectionPermissionFlag.RestrictedMemberAccess et si l’ensemble d’octroi des membres non publics est limité au jeu d’octrois de l’appelant ou à un sous-ensemble de celui-ci. (Consultez considérations relatives à la sécurité pour la réflexion.)
Pour utiliser cette fonctionnalité, votre application doit cibler le .NET Framework 3.5 ou version ultérieure.
Voir aussi
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
S’applique à
InvokeMember(String, BindingFlags, Binder, Object, Object[])
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
Appelle le membre spécifié, en utilisant les contraintes de liaison spécifiées et en correspondant à la liste d’arguments spécifiée.
public:
System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
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.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
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
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object
Paramètres
- name
- String
Chaîne contenant le nom du constructeur, de la méthode, de la propriété ou du membre de champ à appeler.
- ou -
Chaîne vide ( » « ) pour appeler le membre par défaut.
- ou -
Pour IDispatch les membres, une chaîne représentant le DispID, par exemple « [DispID=3] ».
- invokeAttr
- BindingFlags
Combinaison de bits des valeurs d’énumération qui spécifient la façon dont la recherche est effectuée. L’accès peut être l’un des BindingFlags tels que Public, , PrivateNonPublic, InvokeMethod, , GetFieldetc. Le type de recherche n’a pas besoin d’être spécifié. Si le type de recherche est omis, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static sont utilisés.
- binder
- Binder
Objet qui définit un ensemble de propriétés et active la liaison, qui peut impliquer la sélection d’une méthode surchargée, la contrainte des types d’arguments et l’appel d’un membre via la réflexion.
- ou -
Référence Null (Nothing dans Visual Basic), pour utiliser le DefaultBinder. Notez que la définition explicite d’un Binder objet peut être nécessaire pour appeler correctement des surcharges de méthode avec des arguments de variable.
- target
- Object
Objet sur lequel appeler le membre spécifié.
- args
- Object[]
Tableau contenant les arguments à passer au membre à appeler.
Retours
Objet représentant la valeur de retour du membre appelé.
Implémente
- Attributs
Exceptions
invokeAttr ne contient CreateInstance pas et name n’est nullpas .
invokeAttr n’est pas un attribut valide BindingFlags .
- ou -
invokeAttrne contient pas l’un des indicateurs de liaison suivants : InvokeMethod, , CreateInstanceGetField, SetField, , GetPropertyou SetProperty.
- ou -
invokeAttrcontient CreateInstance combiné avec InvokeMethod, , GetField, SetFieldGetProperty, 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 possède plusieurs éléments.
- ou -
Cette méthode est appelée sur un objet COM et l’un des indicateurs de liaison suivants n’a pas été transmis : BindingFlags.InvokeMethod, , BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyou BindingFlags.PutRefDispProperty.
- ou -
L’un des tableaux de paramètres nommés contient une chaîne qui est null.
Le membre spécifié est un initialiseur de classe.
Impossible de trouver le champ ou la propriété.
Aucune méthode n’est trouvée qui correspond aux arguments dans args.
- ou -
L’objet actuel Type représente un type qui contient des paramètres de type ouvert, autrement dit, ContainsGenericParameters retourne true.
Impossible d’appeler le membre spécifié sur target.
Plusieurs méthodes correspondent aux critères de liaison.
Le .NET Compact Framework ne prend pas actuellement en charge cette méthode.
La méthode représentée par name un ou plusieurs paramètres de type générique non spécifiés. Autrement dit, la propriété de ContainsGenericParameters la méthode retourne true.
Exemples
L’exemple suivant utilise InvokeMember pour accéder aux membres d’un type.
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);
}
}
open System
open System.Reflection
// This sample class has a field, constructor, method, and property.
type MyType() =
let mutable myField = 0
member _.MyType(x: int byref) =
x <- x * 5
override _.ToString() =
string myField
member _.MyProp
with get () = myField
and set value =
if value < 1 then
raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
myField <- value
let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."
// Read and write to a field.
t.InvokeMember("myField",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"
// Call a method.
let s = t.InvokeMember("ToString",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"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, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
// If the property assignment failed for some unexpected
// reason, rethrow the TargetInvocationException.
if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
reraise ()
printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
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
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
Remarques
Note
Vous ne pouvez pas utiliser InvokeMember pour appeler une méthode générique.
Les indicateurs de filtre suivants BindingFlags peuvent être utilisés pour définir les membres à inclure dans la recherche :
Spécifiez
BindingFlags.Publicd’inclure des membres publics dans la recherche.Spécifiez
BindingFlags.NonPublicd’inclure des membres non publics (c’est-à-dire des membres privés et protégés) dans la recherche.Spécifiez
BindingFlags.FlattenHierarchyd’inclure des membres statiques dans la hiérarchie.
Les indicateurs de modification suivants BindingFlags peuvent être utilisés pour modifier le fonctionnement de la recherche :
BindingFlags.IgnoreCasepour ignorer le cas dename.BindingFlags.DeclaredOnlypour rechercher uniquement les membres déclarés sur le Type, et non les membres qui étaient simplement hérités.
Les indicateurs d’appel suivants BindingFlags peuvent être utilisés pour indiquer quelle action effectuer avec le membre :
CreateInstancepour appeler un constructeur.nameest ignoré. Non valide avec d’autres indicateurs d’appel.InvokeMethodpour appeler une méthode, mais pas un constructeur ou un initialiseur de type. Non valide avecSetFieldouSetProperty. SiInvokeMethodelle est spécifiée par elle-même,BindingFlags.PublicetBindingFlags.StaticBindingFlags.Instanceest automatiquement incluse.GetFieldpour obtenir la valeur d’un champ. Non valide avecSetField.SetFieldpour définir la valeur d’un champ. Non valide avecGetField.GetPropertypour obtenir une propriété. Non valide avecSetProperty.SetPropertypour définir une propriété. Non valide avecGetProperty.
Pour plus d’informations, consultez System.Reflection.BindingFlags.
Une méthode est appelée si les deux conditions suivantes sont remplies :
Le nombre de paramètres dans la déclaration de méthode est égal au nombre d’arguments du
argstableau (sauf si les arguments par défaut sont définis sur le membre etBindingFlags.OptionalParamBindingspécifiés).Le type de chaque argument peut être converti par le classeur en type du paramètre.
Le classeur trouvera toutes les méthodes correspondantes. Ces méthodes sont trouvées en fonction du type de liaison demandée (BindingFlags valeurs InvokeMethod, GetPropertyetc.). 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 classeur.
Une fois la méthode sélectionnée, elle est appelée. L’accessibilité est vérifiée à ce stade. La recherche peut contrôler quel ensemble de méthodes sont recherchés en fonction de l’attribut d’accessibilité associé à la méthode. La Binder.BindToMethod méthode de la Binder classe est chargée de sélectionner la méthode à appeler. Le classeur par défaut sélectionne la correspondance la plus spécifique.
Les restrictions d’accès sont ignorées pour le code entièrement approuvé ; autrement dit, des constructeurs privés, des méthodes, des champs et des propriétés sont accessibles et appelés chaque System.Reflection fois que le code est entièrement approuvé.
Vous pouvez utiliser Type.InvokeMember pour définir un champ sur une valeur particulière en spécifiant BindingFlags.SetField. Par exemple, si vous souhaitez définir un champ d’instance publique nommé F sur la classe C et F est un String, vous pouvez utiliser du code tel que :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});
Si F est un String[], vous pouvez utiliser du code tel que :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});
qui initialise le champ F à ce nouveau tableau. 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 du code tel que le suivant :
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});
Cette opération modifie la chaîne « z » dans le tableau qui contient la valeur « b ».
Lorsque vous appelez un IDispatch membre, vous pouvez spécifier le DispID au lieu du nom du 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] » au lieu de « MyComMethod ». L’appel d’un membre par DispID est plus rapide que de rechercher le membre par nom. Dans les scénarios d’agrégation complexes, le DispID est parfois le seul moyen d’appeler le membre souhaité.
Note
Cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu ReflectionPermission l’indicateur ReflectionPermissionFlag.RestrictedMemberAccess et si l’ensemble d’octroi des membres non publics est limité au jeu d’octrois de l’appelant ou à un sous-ensemble de celui-ci. (Consultez considérations relatives à la sécurité pour la réflexion.)
Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5 ou version ultérieure.
Voir aussi
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission