DynamicMethod.Invoke 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 la méthode dynamique à l’aide des paramètres spécifiés, sous les contraintes du binder 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);
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 bits de valeurs BindingFlags.
- binder
- Binder
Objet Binder qui active la liaison, la contrainte de types d’arguments, l’appel des membres et la récupération d’objets MemberInfo par la réflexion. Si binder
est null
, le binder par défaut est utilisé. Pour plus d'informations, consultez Binder.
- parameters
- Object[]
Liste d’arguments. Il s’agit d’un tableau d’arguments possédant les mêmes nombre, ordre et type que les paramètres de la méthode à appeler. En l’absence de paramètres, ce paramètre doit avoir la valeur null
.
- culture
- CultureInfo
Instance de CultureInfo utilisée pour régir la contrainte des types. Si la valeur est null
, le CultureInfo du thread actuel est utilisé. Par exemple, ces informations sont nécessaires pour convertir correctement un String représentant 1000 en valeur Double, car 1000 est représenté de différentes manières selon la culture.
Retours
Object contenant la valeur de retour de la méthode appelée.
Exceptions
La convention d’appel VarArgs n’est pas prise en charge.
Le nombre d’éléments dans parameters
ne correspond pas au nombre de paramètres dans la méthode dynamique.
Le type d’un ou plusieurs éléments de parameters
ne 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 de manière anonyme, et la valeur false
a été affectée à skipVisibility
lors de sa construction. Toutefois, la méthode dynamique accède à des membres qui ne sont pas public
ou internal
(Friend
en Visual Basic).
- ou -
La méthode dynamique est hébergée de manière anonyme, et la valeur false
a été affectée à skipVisibility
lors de sa construction. Toutefois, elle accède à des membres qui ne sont pas public
.
- ou -
La méthode dynamique contient du code non vérifiable. Consultez la section « Vérification » dans la section Notes pour DynamicMethod.
Exemples
L’exemple de code suivant appelle une méthode dynamique avec une liaison exacte, à l’aide de la culture US-English. 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.
array<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(nullptr, BindingFlags::ExactBinding, nullptr, invokeArgs, gcnew CultureInfo("en-us"));
Console::WriteLine("hello.Invoke returned: " + objRet);
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
En plus des exceptions répertoriées, le code appelant doit être prêt à intercepter toutes 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 son exécution avec la Invoke méthode .
L’appel de la Invoke méthode ou de la CreateDelegate méthode complète 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 intermédiaire Microsoft (MSIL), est ignorée ; aucune exception n’est levée.
Toutes les méthodes dynamiques étant statiques, le obj
paramètre est toujours ignoré. Pour traiter une méthode dynamique comme s’il s’agissait d’une méthode instance, utilisez la CreateDelegate(Type, Object) surcharge qui prend un objet instance.
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 du tableau de paramètres doivent être identiques au nombre, au type et à l’ordre des paramètres de la méthode dynamique.
Notes
Cette surcharge de méthode étant appelée par la Invoke(Object, Object[]) surcharge de méthode héritée de la MethodBase classe, 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 exigences de sécurité, en fonction de la méthode. Par exemple, aucune demande n’est faite pour les méthodes dynamiques hébergées anonymement qui sont créées avec le restrictedSkipVisibility
paramètre défini sur false
. En revanche, si vous créez une méthode dont restrictedSkipVisibility
la valeur est définie sur afin qu’elle puisse accéder à true
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 .
Notes
Avant .NET Framework 2.0, cette méthode était requise ReflectionPermission avec l’indicateur MemberAccess .