DynamicMethod.Invoke Méthode

Définition

Appelle la méthode dynamique à l’aide des paramètres spécifiés, sous les contraintes du classeur spécifié, avec les informations de culture spécifiées.

public:
 override System::Object ^ Invoke(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ parameters, System::Globalization::CultureInfo ^ culture);
public override object Invoke(object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture);
override this.Invoke : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Overrides Function Invoke (obj As Object, invokeAttr As BindingFlags, binder As Binder, parameters As Object(), culture As CultureInfo) As Object

Paramètres

obj
Object

Ce paramètre est ignoré pour les méthodes dynamiques, car elles sont statiques. Spécifiez null.

invokeAttr
BindingFlags

Combinaison de valeurs au niveau du BindingFlags bit.

binder
Binder

Objet Binder qui permet la liaison, la contrainte des types d’arguments, l’appel de membres et la récupération d’objets MemberInfo par réflexion. Si binder c’est nullle cas, le classeur par défaut est utilisé. Pour plus d’informations, consultez Binder.

parameters
Object[]

Liste d’arguments. Il s’agit d’un tableau d’arguments avec le même nombre, l’ordre et le même type que les paramètres de la méthode à appeler. S’il n’existe aucun paramètre, ce paramètre doit être null.

culture
CultureInfo

Instance utilisée CultureInfo pour régir la contrainte des types. Si c’est nullle cas, le CultureInfo thread actuel est utilisé. Par exemple, ces informations sont nécessaires pour convertir correctement une String valeur représentant 1 000 en Double valeur, car 1000 est représenté différemment par différentes cultures.

Retours

Contenant Object la valeur de retour de la méthode appelée.

Exceptions

La VarArgs convention d’appel n’est pas prise en charge.

Le nombre d’éléments dans parameters ne correspond pas au nombre de paramètres de la méthode dynamique.

Le type d’un ou plusieurs éléments ne parameters correspond pas au type du paramètre correspondant de la méthode dynamique.

La méthode dynamique est associée à un module, n’est pas hébergée anonymement et a été construite avec skipVisibility défini sur false, mais la méthode dynamique accède aux membres qui ne sont pas public ou internal (Friend dans Visual Basic).

-ou-

La méthode dynamique est hébergée anonymement et a été construite avec skipVisibility la valeur définie falsesur , mais elle accède aux membres qui ne sont pas public.

-ou-

La méthode dynamique contient du code non vérifiable. Consultez la section « Vérification » dans les remarques pour DynamicMethod.

Exemples

L'exemple de code suivant appelle une méthode dynamique avec une liaison exacte, à l'aide de la culture anglaise (États-Unis). Cet exemple de code fait partie d’un exemple plus grand fourni pour la DynamicMethod classe.

Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
object[] invokeArgs = {"\r\nHello, World!", 42};
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
Console.WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine(vbCrLf & "Use the Invoke method to execute the dynamic method:")
' Create an array of arguments to use with the Invoke method.
Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
' Invoke the dynamic method using the arguments. This is much
' slower than using the delegate, because you must create an
' array to contain the arguments, and value-type arguments
' must be boxed.
Dim objRet As Object = hello.Invoke(Nothing, _
    BindingFlags.ExactBinding, Nothing, invokeArgs, _
    New CultureInfo("en-us"))
Console.WriteLine("hello.Invoke returned: {0}", objRet)

Remarques

Outre les exceptions répertoriées, le code appelant doit être prêt à intercepter les exceptions levées par la méthode dynamique.

L’exécution d’une méthode dynamique avec un délégué créé par la CreateDelegate méthode est plus efficace que de l’exécuter avec la Invoke méthode.

L’appel de la Invoke méthode ou de la CreateDelegate méthode termine la méthode dynamique. Toute autre tentative de modification de la méthode dynamique, telle que la modification des définitions de paramètres ou l’émission d’un langage MSIL (Microsoft Intermediate Language), est ignorée ; aucune exception n’est levée.

Toutes les méthodes dynamiques sont statiques. Par conséquent, le obj paramètre est toujours ignoré. Pour traiter une méthode dynamique comme s’il s’agissait d’une méthode d’instance, utilisez la CreateDelegate(Type, Object) surcharge qui prend une instance d’objet.

Si la méthode dynamique n’a aucun paramètre, la valeur de parameters doit être null. Sinon, le nombre, le type et l’ordre des éléments dans le tableau de paramètres doivent être identiques au nombre, au type et à l’ordre des paramètres de la méthode dynamique.

Note

Cette surcharge de méthode est appelée par la Invoke(Object, Object[]) surcharge de méthode héritée de la MethodBase classe, de sorte que les remarques précédentes s’appliquent aux deux surcharges.

Cette méthode ne demande pas d’autorisations directement, mais l’appel de la méthode dynamique peut entraîner des demandes de sécurité, en fonction de la méthode. Par exemple, aucune exigence n'existe pour les méthodes dynamiques hébergées anonymement et créées avec le paramètre `restrictedSkipVisibility` défini sur `false`. En revanche, si vous créez une méthode avec restrictedSkipVisibility la valeur définie true pour qu’elle puisse accéder à un membre masqué d’un assembly cible, la méthode entraîne une demande d’autorisations de l’assembly cible plus ReflectionPermission avec l’indicateur ReflectionPermissionFlag.MemberAccess .

S’applique à

Voir aussi